RxJS retry() 语义
RxJS retry() semantics
鉴于此 example .retry()
:
// Try three times to get the data and then give up
var source = get('url').retry(3);
get()
return是什么意思?有人可以提供一个实现来使这个例子工作吗?即实际重试一些异步代码 3 次。
我刚开始使用 RxJS,我正在尝试理解其语义,获得上面的示例真的很有帮助,谢谢!
get
returns 一个 Observable
。 retry
所做的是订阅底层 Observable
并捕获 onError
调用,然后重新订阅 Observable
,同时从下游隐藏 onError
,从而保持从终止流。 Observable
的唯一要求是它必须 "start on subscribe" 语义,或者换句话说是冷 Observable
.
所以 get
可以实现为:
function get() {
var count = 0;
return Rx.Observable.create(function(observer) {
if (++count < 2) observer.onError(new Error());
else {
observer.onNext("Yay!");
observer.onCompleted();
}
});
}
编辑
我重新阅读了您的问题,我认为我误解了您的问题。我给出的第一个示例只是一种快速查看如何制作可与 retry
一起使用的简单 Observable
的方法。在 get
给出的场景中,它正在执行某种 http 请求。
以下是使用 RxJS-DOM Library 执行 Ajax 请求,但您也可以使用其他具有 Promises
的库。
//With RxJS DOM
function get(url) {
return Rx.DOM.ajax({url : url});
}
//With JQuery Promises
function get(url) {
return Rx.Observable.defer(function() {
return $.ajax(url);
});
}
在这两种情况下,您都在访问一些可能会出错的远程服务器资源。在其后添加 retry
可确保该问题不是暂时性网络问题。
鉴于此 example .retry()
:
// Try three times to get the data and then give up
var source = get('url').retry(3);
get()
return是什么意思?有人可以提供一个实现来使这个例子工作吗?即实际重试一些异步代码 3 次。
我刚开始使用 RxJS,我正在尝试理解其语义,获得上面的示例真的很有帮助,谢谢!
get
returns 一个 Observable
。 retry
所做的是订阅底层 Observable
并捕获 onError
调用,然后重新订阅 Observable
,同时从下游隐藏 onError
,从而保持从终止流。 Observable
的唯一要求是它必须 "start on subscribe" 语义,或者换句话说是冷 Observable
.
所以 get
可以实现为:
function get() {
var count = 0;
return Rx.Observable.create(function(observer) {
if (++count < 2) observer.onError(new Error());
else {
observer.onNext("Yay!");
observer.onCompleted();
}
});
}
编辑
我重新阅读了您的问题,我认为我误解了您的问题。我给出的第一个示例只是一种快速查看如何制作可与 retry
一起使用的简单 Observable
的方法。在 get
给出的场景中,它正在执行某种 http 请求。
以下是使用 RxJS-DOM Library 执行 Ajax 请求,但您也可以使用其他具有 Promises
的库。
//With RxJS DOM
function get(url) {
return Rx.DOM.ajax({url : url});
}
//With JQuery Promises
function get(url) {
return Rx.Observable.defer(function() {
return $.ajax(url);
});
}
在这两种情况下,您都在访问一些可能会出错的远程服务器资源。在其后添加 retry
可确保该问题不是暂时性网络问题。