我有一系列我想要获取请求的网址。我从urls数组创建了一个流,并且flatMap ajax请求,如下所示: respond = Bacon.fromArray(url_arr) .flatMap(function(url){Bacon.fromPromise($。get(url))})
现在,在响应流中,我想继续重做ajax,直到得到值。我怎么做?
答案 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请求。