highland.js асинхронный массив для потока значений
Я пытаюсь получить следующие фрагменты, чтобы вернуть тот же вывод - поток значений массива.
Первый метод начинается с массива и выдает значения.
Второй метод получает в качестве входных данных обещание, которое разрешает массив, поэтому вместо выдачи каждого из значений он генерирует только сам массив.
Что я должен изменить во втором методе, чтобы он выводил то же самое, что и первый?
const h = require('highland');
var getAsync = function () {
return new Promise((resolve, reject) => {
resolve([1,2,3,4,5]);
});
}
h([1,2,3,4,5])
.each(console.log)
.tap(x => console.log('>>', x))
.done();
//outputs 5 values, 1,2,3,4,5
h(getAsync())
.tap(x => console.log('>>', x))
.done();
//outputs >>[1,2,3,4,5]
1 ответ
В обоих случаях вам не нужно вызывать done
, поскольку each
уже потребляет ваш поток.
Случай с обещанием передаст разрешенное значение (то есть массив чисел) в поток. Ты можешь использовать series
метод, чтобы превратить каждый массив в этом потоке в его собственный поток, а затем объединить потоки. В этом примере это немного нелогично, поскольку существует только один массив и, следовательно, только один поток для объединения. Но это то, что вы хотите - поток цифр.
Вот код:
const h = require('highland');
var getAsync = function () {
return new Promise((resolve, reject) => {
resolve([1,2,3,4,5]);
});
}
h([1,2,3,4,5]) // stream of five numbers
.each(console.log) // consumption
h(getAsync()) // stream of one array
.series() // stream of five numbers
.each(x => console.log('>>', x)) // consumption