我有一个执行ajax调用的函数,另一个处理错误的函数。目标是:将错误操作为更好的格式以便稍后使用(参见下面的示例)。
问题:虽然没有调用.then()
的第二个回调。
代码:
function _handleError(error) {
//bring error info in better usable format
...
return errorRes;
}
function getSth(...) {
...
return $.ajax({
url: baseUrl + query,
type: "GET",
headers: {
...
}
}).then(function (data) {
var results = data.d.results;
... //Do mapping stuff
return results;
}, _handleError);
}
我想如何实现它:
getSth(...).then(function(results){
...
}, function(err){
console.log(err);
... //Do more with error info
});
给.then()
的第二个函数永远不会被调用,_handleError()
就是这样。我很确定我误解了Promise的概念。
答案 0 :(得分:1)
如果在调用_handleError
之后,您希望承诺链继续被拒绝,那么您需要throw
或从_handleError
内返回被拒绝的承诺。
如果您没有返回任何内容或仅从handleError
返回正常值,则Promise基础结构会假定您“处理”了错误并且不再是错误。这是在try/catch
之后建模的,如果您catch
出现错误并且没有重新抛出,则该异常被视为已处理且不会传播到更高级别。
示例:
function _handleError(err) {
// do something to the error value
let newError = new Error(...);
// rethrow the error so the promise continues as rejected
// and so that the next error handler on that promise chain will get called
throw newError;
}