使用可观察函数的数组,每个项目的输出是下一个项目的输入

时间:2019-04-15 18:47:22

标签: arrays angular typescript rxjs

我有一个函数数组,这些函数返回可观察的函数,我希望依次使用每个函数的可观察输出作为下一个函数输入来依次执行,直到调用了数组中的每个函数为止。

我怎样才能最好地将其作为可观察到的?

我有一个数组的函数类型:

if (cell == nil)

2 个答案:

答案 0 :(得分:1)

您可以使用Add-Type -AssemblyName System.Speech $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer $speak.GetInstalledVoices().VoiceInfo Array.reduce运算符链接每个fn

赞:

switchMap

这里有一个playground example for this

答案 1 :(得分:0)

如果您希望Observable链不仅发出最终函数的结果,而且发出函数之间返回的每个Observable的结果,则可以使用expand遍历函数数组。 / p>

expand将立即发出当前可观察到的值,然后以先前发出的值作为输入映射到下一个可观察到的值。这将无限期地继续,因此您必须通过映射到EMPTY来停止循环。

import { of, EMPTY } from 'rxjs';
import { expand, skip } from 'rxjs/operators';

// initialValue is the value passed to the first function
of(initialValue).pipe(
  expand((value, i) => i < fns.length ? fns[i](value) : EMPTY),
  skip(1) // don't emit the initialValue
);