我已经实现了一个轮询逻辑,检查RESTful服务的状态,返回后端作业的状态。我遇到了关闭轮询并用“unsubBus”解决问题的问题。我想知道这是否能以更好的方式解决。
var unsubBus = new Bacon.Bus();
// Poll job status code until it's successful
var succStream = Bacon.interval(pollInterval)
.takeUntil(unsubBus)
.flatMapLatest(function (v) { return this.checkStatus(jobId); })
.filter(function(v) { return v === true; });
// Unsubscribe and do something
succStream.onValue(function (_) { unsubBus.push(true); });
succStream.onValue(function (_) { DO-SOMETHING; });
答案 0 :(得分:3)
您可以将.take(1)
添加到succStream
,只取1个值。轮询停止,因为流没有更多订阅者。看看这个jsfiddle。
// Poll job status code until it's successful
var succStream = Bacon.interval(pollInterval)
.flatMapLatest(function (v) { return checkStatus(); })
.filter(function(v) { return v === true; });
succStream.take(1).onValue(function (_) { log("success") });