我试图找出为什么我的重试在这个例子中不起作用:http://jsbin.com/bobecoluxu/edit?js,output
var response$ = Rx.Observable.fromPromise(
$.ajax({
url: 'http://en.wikipedia.org/w/api.php',
dataType: 'jsonp',
data: {
action: 'opensearch',
format: 'json',
search: term
}
}))
.retry(3);
我已经将 ajax 调用包装在 searchWikipedia 函数的 Observable 中,但是如果我尝试通过关闭 wifi 或相关运算符(operator)抛出异常来强制此调用失败,那么它根本不起作用。
提前致谢!
最佳答案
当您将 Promise 传递给 fromPromise
并调用重试时,它只会继续发出相同的 Promise(即不会发出后续的 HTTP 请求)。
如果您将一个返回 Promise 的函数传递给 fromPromise
,该函数将被重新调用(允许在失败时发送后续的 HTTP 请求)。下面的例子说明了这一点:
const makesPromise = () => {
console.log('calling');
// Purposefully reject the Promise. You would return the return value
// of your call to $.ajax()
return Promise.reject();
};
const stream = Rx.Observable.fromPromise(makesPromise).retry(3);
stream.subscribe(log);
// >> calling
// >> calling
// >> calling
// Finally throws an uncaught error
注意:我必须更新到 RXJS 的最新 4.x 版本才能使用此功能
关于javascript - RxJS 重试运算符与 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073058/