rxjs - 延迟函数返回,直到流值满足条件并取消订阅

时间:2017-11-13 19:46:12

标签: angular reactjs typescript rxjs reactive-programming

我有一个触发服务器请求的方法。它可以访问redux-store中的流,并且一旦在所提到的流中找到请求的结果就应该执行回调。所以基本上:

private resultStream$: Observable<boolean>;
doFetch(args, callback) {
    store.dispatchHttpRequest(args);
    // this should only be executed when resultStream$ emits true
    callback();
}

如果callback();发出真假并且我从流中取消订阅,那么如何调用resultStream$,那么没有内存泄漏?

我已经尝试了takeWhile(),将dispatchHttpRequest条件的设置者(对于takeWhile)和回调本身放在subscription()中,但似乎我做错了因为我得到了我的应用程序中的错误。确切地说,只有在多次调用doFetch()时才执行回调,因此第一个请求不会收到回调响应。

2 个答案:

答案 0 :(得分:2)

试试这个:

def f():
    rest = [2, 3]
    return 1, *rest

答案 1 :(得分:1)

您可以使用链处理时调用的finally。这意味着当所有观察者取消订阅或链完成/错误时。

private resultStream$: Observable<boolean>;

doFetch(args, callback) {
    store.dispatchHttpRequest(args);

    return this.resultStream
      // be aware that `takeWhile` completes when the predicate function returns false
      .takeWhile(val => !Boolean(val) /* or whatever ... */)
      .finally(() => callback());
}

如果你知道连锁店即将完成,你就不需要取消订阅。