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