例如我有voidFucntion1()
,voidFunction2()
,我想要
Observable.forkJoin([voidFunction1(), voidFunction2()]).subscribe() ;
然而这根本不起作用,那么如何构建void函数呢?没有改变原来的voidFunction()?
答案 0 :(得分:3)
首先:我高度建议你重构你的void函数,除此之外,是有可能在流中使用void-functions,即使它使没有意义:
你可以用rxjs中的void-function做的唯一事情是do
- 运算符和defer
- 运算符:
Rx.Observable.defer(() => {
voidFunction1();
voidFunction1();
return Rx.Observable.of("Done");
})
.subscribe(console.log);
function voidFunction1() {
console.log("Called VoidFunc");
// I'm not enjoyed
// because I'm void!
}

<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
&#13;
如果您 使用forkJoin
:
const voidWrapper$ = wrapVoid(voidFunc);
const voidWrapper2$ = wrapVoid(voidFunc);
Rx.Observable.forkJoin(voidWrapper$, voidWrapper2$)
.subscribe(console.log);
function wrapVoid(func) {
return Rx.Observable.defer(() => {
func();
return Rx.Observable.of("Done");
})
}
function voidFunc() {
console.log("called voidFunc");
// notn' ho!
}
&#13;
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
&#13;
答案 1 :(得分:2)
Forkjoin会在执行回调函数之前等待所有的observable解析。
如果你的“void”observables永远不会返回,那么forkjoin会挂起。你需要使这些功能具有分辨率,即使它们没有“返回”任何东西。