亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 2843 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號