Gulp: Как создать поток из обещания массива потоков?

У меня есть список задач, которые инициируются асинхронной функцией. Я заканчиваю с обещанием множества потоков. Мне нужно объединить эти потоки в один поток и вернуть его в 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'));
    });
});

1 ответ

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
Другие вопросы по тегам