【发布时间】: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