我有一個包含超時承諾的服務器請求。如何查看WinJS.Promise是否被超時取消或取消()調用
var pendingRequest = WinJS.Promise.timeout(5000, requestAsync)
。
用戶還在UI上有一個「取消」按鈕,通過執行pendingRequest.cancel()
來主動取消該請求。但是,沒有辦法發現承諾已被用戶取消或超時(因爲超時在內部也會調用promise.cancel()
)。
這本來很不錯的WinJS.Promise.timeout會將錯誤狀態中的承諾移動到不同的Error
對象,如「超時」而不是「已取消」。
任何想法如何找出請求是否被超時取消?
更新:這個怎麼樣的解決方案:
(function (P) {
var oldTimeout = P.timeout
P.timeout = function (t, promise) {
var timeoutPromise = oldTimeout(t);
if (promise) {
return new WinJS.Promise(function (c, e, p) {
promise.then(c,e,p);
timeoutPromise.then(function() {
e(new WinJS.ErrorFromName("Timeout", "Timeout reached after " + t + "ms"));
});
});
} else {
return timeoutPromise;
}
};
})(WinJS.Promise);
我知道。那就是問題所在。無論是否由於timeout超時而取消承諾,或者通過超時承諾的其他人致電取消,都是不可能知道的。 – philk
@philk只是...自己推出'.timeout'? –
編輯答案。我認爲它現在回答了這個問題。 –