我有一个函数数组,这些函数返回可观察的函数,我希望依次使用每个函数的可观察输出作为下一个函数输入来依次执行,直到调用了数组中的每个函数为止。
我怎样才能最好地将其作为可观察到的?
我有一个数组的函数类型:
if (cell == nil)
答案 0 :(得分:1)
您可以使用Add-Type -AssemblyName System.Speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$speak.GetInstalledVoices().VoiceInfo
与Array.reduce
运算符链接每个fn
赞:
switchMap
答案 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
);