如何forkJoin()void函数?

时间:2017-02-08 17:05:11

标签: angular rxjs observable

例如我有voidFucntion1()voidFunction2(),我想要

Observable.forkJoin([voidFunction1(), voidFunction2()]).subscribe() ;

然而这根本不起作用,那么如何构建void函数呢?没有改变原来的voidFunction()?

2 个答案:

答案 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;
&#13;
&#13;

如果您 使用forkJoin

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:2)

Forkjoin会在执行回调函数之前等待所有的observable解析。

如果你的“void”observables永远不会返回,那么forkjoin会挂起。你需要使这些功能具有分辨率,即使它们没有“返回”任何东西。