async/await catch不到错误?

function f() {
    return new Promise((resolve, reject) => {
        setTimeout(()=>{
            reject(0)
        },1000)
    })
}
async function  main() {
    let func=[];
    try {
        func.push(f());
        for (let i of [1,2,3]){
            await f();
        }
        await Promise.all(func);
    }catch (e) {
        console.log(e);
    }
}
main();

为什么这样会报Unhandled promise rejection,难道f()在放进func时就执行了吗,小白求解

阅读 3.6k
2 个回答

因为你func.push(f()) 那么当然会执行f() 你不想执行 那么func.push(f)
你执行完因为reject所以抛异常了
如果你想catch,用f().catch()

func.push(f()) 这句抛出的错误,f()调用的时候没 await,改成下面就不会报错了:

func.push(f)
// 或
func.push(await f())
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题