【发布时间】:2017-12-15 05:22:48
【问题描述】:
我有一个函数,当发生错误时(例如“超时”)应该抛出一个错误,我在承诺链的末尾捕获。
var createOrder = function (id) {
Utility.toggleProgressBar();
return $.ajax({
url: 'http://' + AppVar.ServerUrlWithPort + '/restapi/CreateOrder',
data: JSON.stringify({
'SessionId': AppVar.SessionId,
'Idrmtreq': id
}),
}).then(function (response) {
if (response.ResultCode === '0') {
return response;
} else {
throw new Error($.i18n('Error-RetrivingDataProblem'));
}
}).fail(function (x, t, m) {
if (t === "timeout") {
throw new Error($.i18n('Error-Timeout')); //code reaches here, where Chrome debugger says that this error was left Uncaught
//for the record, I checked whether the translation function could be the problem and it doesn't work even when I do 'throw "timeout";'
} else {
throw new Error($.i18n('Error-ConnError'))
}
}).catch(function (error) {
//error == {"readyState":0,"status":0,"statusText":"timeout"}
ErrorManager.displayError(error);
return;
}).always(function () {
Utility.toggleProgressBar();
})
}
具体来说,我遇到了超时问题。代码到达投掷。我扔的球实际上没有被抓住,但有些东西被扔了。 Catch 捕获包含此 Object {"readyState":0,"status":0,"statusText":"timeout"} 的错误。
我不明白。扔什么?
【问题讨论】:
-
你使用的是哪个 jQuery 版本?
-
.fail没有做你认为的事情 -
$.ajax 正在抛出它。
-
@Jonasw 那么,它会延迟抛出它吗?正如我所说,我可以一直断点到实际的 throw 并抛出它,此时我的 catch 将捕获 ajax 错误?这很奇怪。
-
似乎
catch是在promise 被拒绝时触发的,而不是在抛出错误时触发的。我猜你还是得用try{ }catch(err){ }结束
标签: javascript jquery jquery-deferred jquery-3