如何在Bacon.js中实现REST api的轮询?

时间:2014-11-17 09:20:51

标签: rest frp bacon.js

我已经实现了一个轮询逻辑,检查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; });

1 个答案:

答案 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") });