我已经写了这个 xhrWithRetry 方法。
目的:此 util 方法将重试几次,以防服务调用失败并出现错误代码 500。调用此 util 方法的客户端代码应该能够通过链接 then 处理程序来捕获此 util 方法中引发的任何异常。每次重试应该延迟几毫秒。
在我的测试中,
- 我能够在调用代码中捕获最大重试后最后抛出的异常。
- 代码也适用于非错误场景。
这个问题主要是看是否有更好的方法来编写相同的异步函数。
WinJS.Namespace.define('Utils.Http',
{
xhrWithRetry: function xhrWithRetry(options, retryCount)
{
var maxRetries = 5;
if (retryCount == undefined)
retryCount = 0;
return WinJS.xhr(options).then(null, function onerror(error)
{
if (error.status == 500 && retryCount < maxRetries)
return WinJS.Promise.timeout(100).then(function retryxhr()
{
return Utils.Http.xhrWithRetry(options, retryCount + 1);
});
throw error;
});
}
});