我想要第三个"然后"当第二个"然后"叫做。然而,它仍然称为第三个"然后"即使承诺被拒绝(第二个"然后"被调用),代码返回"拒绝"然后" undefined"。如何不运行第三个"然后"所以" undefined"不会出现?
var FirstPromise = function() {
let promiseme = new Promise(function(res, rej) {
if ('a' == 'b') {
res(1);
} else {
rej('rejected');
}
})
return promiseme;
};
function succeddcallback(msg) {
return msg * 2;
}
function errorcallback(msg) {
console.log(msg);
}
FirstPromise()
.then(succeddcallback, null)
.then(null, errorcallback)
.then(function(succedded) {
console.log(succedded);
}, function(failed) {
console.log(failed);
})
答案 0 :(得分:4)
那是因为您在catch
语句中发现了错误 - 即.then(null,errorcallback)
- 并且您从未抛出其他错误或在其中返回被拒绝的承诺。
...这与返回未定义值的已解析promise相同,这就是下一个.then
执行成功回调的原因。
如果您希望将错误传播到后续.catch
或.then(null,fn)
,那么您的errorcallback
必须抛出(或返回被拒绝的承诺):
function errorcallback(msg) {
console.log(msg);
throw new Error(msg); //or (return Promise.reject(msg);
}
请记住,在每个.catch
(或.then(null,fn)
你必须重新抛出(或返回被拒绝的承诺),以便后续的错误回调被调用。