我正在尝试通过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(_));
答案 0 :(得分:0)
在检查文档https://www.learnrxjs.io/operators/transformation/switchmap.html之后,现在将其清除为第二季度,switchMap将自动完成先前的内部可观察到的东西。