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