为什么该主题在rxjs中取消订阅?

时间:2018-12-02 03:25:36

标签: javascript rxjs polling

我正在尝试通过Rxjs进行http轮询(请求,在获得结果后等待一段时间,然后再次请求),但是仍然有一些问题尚未解决,有人可以帮忙解释一下吗? >

Q1:我从load $的管道发出一个要加载的值,这是实现轮询策略的好方法(它在当前模式下有效,只是不知道这是一种最佳实践)

Q2:我知道当复选框被选中时,pauser $会将一个订户添加到load $,因此会触发load $循环,但是当复选框unick时,pauser只是切换到一个空流,这很好,但是为什么load $停止了?没有人取消订阅吗? (虽然是的,目前可以正常使用,但是为什么?)

        
        const load$ = new BehaviorSubject('').pipe(
            concatMap(_ => concat(
                from(makePromise()).pipe(tap(v => dispatchEvent(v)), tap(v => log("idle "))),
                of('').pipe(delay(2000)),
                // interval(1000).pipe(take(3), tap(v => log("idle " + v))),
                of('').pipe(tap(_ => load$.next('')), skip(1))
            ))
        );

        pauser$ = fromEvent(document.querySelector("#tick"), "click")
            .pipe(
                pluck("target", "checked"),
                switchMap(checked => checked ? load$ : empty())
            )
            .subscribe(_ => _!="" && console.log(_));

1 个答案:

答案 0 :(得分:0)

在检查文档https://www.learnrxjs.io/operators/transformation/switchmap.html之后,现在将其清除为第二季度,switchMap将自动完成先前的内部可观察到的东西。