为了账号安全,请及时绑定邮箱和手机立即绑定

ES7 async await如何catch异常

ES7 async await如何catch异常

明月笑刀无情 2018-09-03 08:30:35
比如我有以下代码: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()方法中报出的异常呢?
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

要获取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');
    }  
}

https://img1.sycdn.imooc.com//5bcadef30001ab9309290526.jpg

查看完整回答
反对 回复 2018-10-20
  • 1 回答
  • 0 关注
  • 2824 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号