1

我有一个由异步函数启动的任务列表。我最终得到了一系列流的承诺。我需要将这些流合并为一个流并将其返回给 Gulp。以下是我想出的。这有点笨拙。有一个更好的方法吗?

return es.readable(function(count, callback) {
    var dest = this;
    promise.then(function(streams) {
        es.merge.apply(null, streams)
            .on('end', dest.emit.bind(dest, 'end'))
            .on('data', dest.emit.bind(dest, 'data'))
            .on('error', dest.emit.bind(dest, 'error'));
    });
});
4

1 回答 1

0

es.merge返回可读流。
没有理由再用es.readable.
我有很长一段时间没有 node.js 经验,但我认为我写了一些有用的东西:)

// async way
function merged(promise, next) {
    promise.then(function(streams) {
        next(null, es.merge.apply(null, streams));
    }, next);
}
// like a promise
function merged(promise) {
  return {
    then: function(ok, fail) {
      promise.then(function(streams) {
        ok(es.merge.apply(null, streams));
      }, fail);
    }
  }; 
}

用法:

merged(promise, function(err, stream){stream.pipe(anyWritable);}); // async
merged(promise).then(function(stream){stream.pipe(anyWritable);}); // then
于 2015-11-11T20:07:46.840 回答