gpt4 book ai didi

javascript - Bluebird .js : Re-Throwing the error in catch callback is not caught again

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:22:21 26 4
gpt4 key购买 nike

我想知道为什么在此示例中从未调用外部 catch 回调:

var returnPromise = function () {
return new Promise(function (resolve, reject) {
resolve('promise return value');
})
};
returnPromise().then(function () {
returnPromise().then(function() {
throw new Error('hello');
}).catch(function (err) {
console.log('got inner error', err);
return Promise.reject(err);
//throw err;
});
}).catch(function (err) {
console.log('got outer error', err);
});

我尝试再次抛出捕获的错误并返回一个被拒绝的 Promise,但在这两种情况下都没有调用外部回调。

谁能告诉我为什么?

使用 bluebird.js 3.0.2 的实例: http://codepen.io/jjd/pen/wMqEpR?editors=001

编辑:我忘记在第 7 行返回 returnPromise(),这就是代码无法按预期工作的原因。

最佳答案

被拒绝的 promise 不是错误。您可以将错误变成被拒绝的 promise - 这就是您所做的:

.catch(function (err) {
return Promise.reject(err);
});

之后它不再是一个错误条件。如果您想要错误条件,请不要捕获并拒绝。

function returnPromise() {
return Promise.resolve('promise return value');
}

returnPromise().then(function () {
return returnPromise().then(function () {
throw new Error("failed");
})
}).catch(function (err) {
console.error("Outer: " + err);
});

如果你的 catch 处理程序只是做一些日志记录,而你想保留错误,那么只需重新抛出它。

returnPromise().then(function () {
return returnPromise().then(function () {
throw new Error("failed");
}).catch(function (err) {
console.error("Inner: " + err);
throw err; // or new Error('...')
});
}).catch(function (err) {
console.error("Outer: " + err);
});

关于javascript - Bluebird .js : Re-Throwing the error in catch callback is not caught again,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34786538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com