我具有以下功能。
function foo() {
return new Promise(async (resolve, reject) => {
await someFunctionThatWillAlwaysBeRejected().catch(err => {
return reject(err);
})
console.log("Some output that should never be shown");
resolve();
})
}
该函数将按预期方式拒绝,但此后它将继续运行直到结束。我猜这是因为catch中的return
仅从匿名函数返回,而不是整个Promise
返回。问题是,是否有任何从catch
内部返回的方式,因此代码在那之后将不会继续执行?我知道我可以将所有内容包装在try
catch
中,而不是使用.catch
,但我正努力避免这种情况。
答案 0 :(得分:1)
问题是,是否有任何方法可以从渔获物内返回
否。
我知道我可以将所有内容包装在try catch中,而不是使用.catch,但是我正在努力避免这种情况。
async
/ await
允许您精确地执行此操作,从而可以解决您遇到的问题。停止避免它。
答案 1 :(得分:1)
尝试一下:
return new Promise(async (resolve, reject) => {
someFunctionThatWillAlwaysBeRejected().then(result => {
console.log("Some output that should never be shown");
resolve();
})
.catch(err => {
return reject(err);
})
})
答案 2 :(得分:0)
您不需要那些Promise包装器,因为异步函数总是返回Promise。因此,您的代码可以简化:
async function foo() {
await someFunctionThatWillAlwaysBeRejected();
console.log("Some output that should never be shown");
}