2015-11-11 3 views
1

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

Почему не 'es.merge.apply (нуль, ручьи). труба (Dest) '? –

+0

@vp_arth 'dest' - читаемый (не перезаписываемый) поток. – cleong

ответ

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 
+0

Ни один из них не создает поток. – cleong