rxjs преобразует массив в наблюдаемый массив для параллельного выполнения (с использованием forkJoin)?

#rxjs

#rxjs

Вопрос:

Как мне преобразовать массив в Observable массив, чтобы я мог запускать каждый наблюдаемый объект параллельно forkJoin ? Должен ли я написать свою собственную функцию map и создать новый наблюдаемый массив или есть какая-либо rxjs функция util для этого?

Комментарии:

1. Попробуйте использовать from operator

2. from просто сделал бы его наблюдаемым, который содержит массив. Что я ищу: например, [‘current’, ‘savings’, ‘investment’] => преобразовать в [наблюдаемый, наблюдаемый, наблюдаемый]

3. Если вы просто хотите создать массив, содержащий наблюдаемые, выполните array.map(v => getObservable(v))

4. нет, вы перепутали of from операторы and, second будет делать то, что вы хотите

Ответ №1:

Вот пример превращения массива чисел в массив timer наблюдаемых, а затем одновременного их forkJoin запуска. Никаких специальных функций RxJS не требуется. Базовый Javascript Array#map работает просто отлично.

 const arrayOfVal = [1000, 1200, 800, 50, 5000];

const arrayOfObs = arrayOfVal.map((tick, index) => 
  timer(tick).pipe(
   tap(_ => console.log(index   " fired!"))
  )
);

forkJoin(arrayOfObs).subscribe(console.log); // output: [0, 0, 0, 0, 0]
  

или конденсируется без tap оператора

 forkJoin([1000, 1200, 800, 50, 5000].map(v => timer(v))).subscribe(console.log)