【发布时间】:2015-04-14 23:34:45
【问题描述】:
我有一个包含在超时承诺中的服务器请求。
var pendingRequest = WinJS.Promise.timeout(5000, requestAsync).
用户在 UI 上还有一个“取消”按钮,可以通过执行pendingRequest.cancel() 来主动取消请求。但是,无法查明承诺是否已被用户或超时取消(因为 timeout 在内部也调用了promise.cancel())。
如果 WinJS.Promise.timeout 使用不同的 Error 对象(如“Timeout”而不是“Canceled”)移动处于错误状态的 Promise,那就太好了。
知道如何确定请求是否已因超时取消?
更新:这个解决方案怎么样:
(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);
【问题讨论】:
标签: javascript promise winjs cancellation