从事件发射器创建生成器

时间:2015-12-11 19:51:49

标签: javascript asynchronous async-await generator co

我有一个异步做某事的功能,例如,

const doSomething = () => {
  request(url)
  .pipe(hasher)
  .on('finish', () => {
    // "return" only here
    return hasher.read();
  });
});

我现在想等待"在函数中,直到hasher.read()可以返回,而不是提前undefined返回(这是上面的变体所做的)。

理想情况下,我会将doSomething用作

const out = yield doSomething();

任何提示?

1 个答案:

答案 0 :(得分:0)

使用deferred:

const q = require('q');

const doSomething = () => {
  const d = q.defer();

  request(url)
  .pipe(hasher)
  .on('finish', () => {
    // "return" only here
    d.resolve(hasher.read());
  });

  return d.promise;
});

然后您可以将其作为承诺处理并使用yield