gpt4 book ai didi

javascript - RxJS retry() 语义

转载 作者:行者123 更新时间:2023-11-29 10:11:30 24 4
gpt4 key购买 nike

鉴于此 example对于 .retry():

// Try three times to get the data and then give up
var source = get('url').retry(3);

get() 返回什么?有人可以提供一个实现来使这个例子工作吗?即实际重试一些异步代码 3 次。

我刚开始使用 RxJS,我正在尝试理解语义,得到上面的例子真的很有帮助,谢谢!

最佳答案

get 返回一个 Observableretry 所做的是订阅底层的 Observable 并捕获 onError 调用,然后重新订阅 Observable 而从下游隐藏 onError 从而防止流终止。 Observable 的唯一要求是它必须“开始订阅”语义,换句话说,它是一个冷的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 后可以确保问题不是暂时性网络问题。

关于javascript - RxJS retry() 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com