code: function detect(coll, iteratee, callback) {
      return createTester(bool => bool, (res, item) => item)(eachOf, coll, iteratee, callback)
  }
docs: Returns the first value in `coll` that passes an async truth test. The
  `iteratee` is applied in parallel, meaning the first iteratee to return
  `true` will fire the detect `callback` with that result. That means the
  result might not be the first item in the original `coll` (in terms of order)
  that passes the test.
  
  If order within the original `coll` is important, then look at
  [`detectSeries`]{@link module:Collections.detectSeries}.
  
  @name detect
  @static
  @memberOf module:Collections
  @method
  @alias find
  @category Collections
  @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.
  @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.
  The iteratee must complete with a boolean value as its result.
  Invoked with (item, callback).
  @param {Function} [callback] - A callback which is called as soon as any
  iteratee returns `true`, or after all the `iteratee` functions have finished.
  Result will be the first item in the array that passes the truth test
  (iteratee) or the value `undefined` if none passed. Invoked with
  (err, result).
  @returns A Promise, if no callback is passed
  @example
  
  async.detect(['file1','file2','file3'], function(filePath, callback) {
  fs.access(filePath, function(err) {
  callback(null, !err)
  });
  }, function(err, result) {
  // result now equals the first file in the list that exists
  });