【发布时间】:2019-07-03 18:42:19
【问题描述】:
我的函数caller 调用了一个函数parent,它本身又调用了child。如果child出现错误,则需要返回caller。
当我 reject 承诺这有效,但是当我尝试返回承诺 resolve 时,它不会返回到 caller
function caller() {
return parent()
}
async function parent(){
const child = await foo(
// more code
).catch(error=>{
if(error === 123) {
return Promise.resolve("This was resolved");
}
return Promise.reject("This was rejected");
})
}
我认为 try / catch 块会起作用,但我更喜欢上面的语法。
【问题讨论】:
-
您正在混合使用 async/await 语法和
.then().catch()语法。您可以使用其中一种,但不能同时使用。如果你使用 async/await,你需要一个 try-catch 来捕捉 promise 的拒绝。另外我认为你的代码不会工作,因为你的函数不是异步的(如果你想在函数块中使用await,function parent()应该是async function parent()) -
因为您的
parent()函数不返回任何内容,尤其是const child。但是错误会在调用堆栈中冒泡。 -
用
try..catch代替await怎么样? stackoverflow.com/a/44664037/2275797 它会更容易阅读,即使对于那些不习惯 javascript 的人来说也是如此。
标签: javascript promise