我寫過這個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