我写过这个xhrWithRetry方法。有没有更好的方法来编写这个xhrRetry实用程序函数?
用途:如果服务调用失败并返回错误代码500,则此util实用程序将重试几次。调用此util方法的客户机代码应该能够通过链接一个然后处理程序来捕获此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;
});
}
});
'那么()'总是返回的承诺。在例外的情况下,不返回或返回不是承诺的价值 - 它将其包含在Promise中,Promise的实现值是返回值。顺便说一句 - 在上面的函数中返回{x:x}的技巧很好。谢谢。 – Sushil 2013-04-12 02:22:25
我很难分析你的第二句话,直到我从上面试过你的代码。我不知道如果在你的第一个'.then()'调用中你传递null来获得成功,它会将你的值转发给下一个'.then()'调用。以及不知道如果你抛出一个错误,它会自动将它包装在你的承诺中。我想我第一次误解了你的问题。因此,我会更新我的答案。 – GotDibbs 2013-04-12 03:10:06
感谢您的链接到其他实现。 – Sushil 2013-04-12 05:14:45