比如我有以下代码: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'); } }
添加回答
举报
0/150
提交
取消