我有一个执行 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 概念。
最佳答案
如果在调用 _handleError
后,您希望 Promise 链继续被拒绝,那么您需要抛出
或从 内部返回被拒绝的 Promise _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;
}
关于javascript - JS promise : error handling concept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43721321/