docs: function firstOf(items, evaluate) {
    return new Promise((accept, reject) => {
      (function next(i) {
        if (i >= items.length) {
          accept(null);
          return;
        }
  
        setImmediate(() => evaluate(items[i], (err, value) => {
          if (err) reject(err);
          else if (value) accept(value);
          else next(i + 1);
        }));
      })(0);
    });
  }