Bacon.js:错误时重做ajax请求

时间:2014-09-13 23:04:30

标签: javascript ajax bacon.js

我有一系列我想要获取请求的网址。我从urls数组创建了一个流,并且flatMap ajax请求,如下所示: respond = Bacon.fromArray(url_arr)   .flatMap(function(url){Bacon.fromPromise($。get(url))})

现在,在响应流中,我想继续重做ajax,直到得到值。我怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用这样的递归:

var pollUrl = function(url) {
  return Bacon.fromPromise($.get(url)).flatMap(function(response) {
    if (ok(response)) {
      return Bacon.once("response OK");
    }
    else {
      return pollUrl(url);
    }
  })
}

Bacon.fromArray(url_arr).flatMap(pollUrl);

答案 1 :(得分:0)

您应该使用flatMap和Bacon.retry

Bacon.fromArray(url_arr).flatMap(function(url) {
    return Bacon.retry({
        source: function() { return Bacon.fromPromise($.get(url)) },
        retries: 5
    })
}).onValue(function(value) {
    console.log("Done: " + value)
}).onError(function(e) {
    // handle error
})

您可以查看此jsFiddle,我在其中使用Math.random()来模拟ajax请求。