ES7 async await如何catch异常

比如我有以下代码:

async function check(){    let promises = _.map(rules, async(rule) => {        throw new Error('aaaaaa');
    });    return promises;
}async function doCheck(){    let result;    try{
         result = await Promise.all(check());
    }    catch(e){        console.log('error occurs');
    }  
}

上面代码执行的时候 console.log('error occurs')是捕获不到的,我有什么办法可以拿到check()方法中报出的异常呢?


明月笑刀无情
浏览 2825回答 1
1回答

qq_笑_17

要获取async函数的返回值,调用的时候,必须要await才能获取,否则获取到的是一个Promise封装过的对象,应该改成这样:async function check(){    let promises = _.map(rules, async(rule) => {        throw new Error('aaaaaa');     });    return promises; }async function doCheck(){    let result;    try{          result = await Promise.all(await check());//await获取promises     }    catch(e){        console.log('error occurs');     }   }上面那样写是对了,不过显得冗余了,因为check函数本身(排除内部函数的代码)并没有await操作,其实不必声明为async,可以去掉check的async声明。function check(){    let promises = _.map(rules, async(rule) => {        throw new Error('aaaaaa');     });    return promises; }async function doCheck(){    let result;    try{          result = await Promise.all(check());     }    catch(e){        console.log('error occurs');     }   }或者改成这样,把Promise.all写在check里,我觉得这样更好。async function check(){    let promises = _.map(rules, async(rule) => {        throw new Error('aaaaaa');     });    return await Promise.all(promises); }async function doCheck(){    let result;    try{          result = await check();     }    catch(e){        console.log('error occurs');     }   }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript