【问题标题】:Why the subject unsubscribed in rxjs?为什么在 rxjs 中取消订阅主题?
【发布时间】:2018-12-02 12:40:07
【问题描述】:

我正在尝试通过 Rxjs 进行 http 轮询(请求,在得到结果后空闲一段时间,然后再次请求),但仍然有几个问题不太清楚,谁能帮忙解释一下?

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

Q2:我知道当复选框打勾时 pauser$ 会添加一个订阅者到 load$,所以 load$ 循环被触发了,但是当复选框取消打勾时,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(_));

【问题讨论】:

    标签: javascript rxjs polling


    【解决方案1】:

    检查文档https://www.learnrxjs.io/operators/transformation/switchmap.html后,现在Q2清零了,switchMap会自动补全之前的内部observable。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2018-07-29
      • 2017-02-15
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      相关资源
      最近更新 更多