如何将async/await与Promise结合使用?async函数如何对接外层then/catch
问题根因
- 你当前的
createPost已经是async函数,天然会返回Promise实例,本身是支持调用then/catch的,现在无法正确触发外层回调是两个代码问题导致的:- 成功执行路径没有返回需要传递给外层
then的结果值 - 内部
catch捕获到错误后只打印了日志,没有向外抛出错误,导致外层感知不到reject状态,错误被内部吞掉了
- 成功执行路径没有返回需要传递给外层
修复方案
直接修改createPost的实现即可,不需要改动外层代码:
module.exports = async (p) => { // 此处省略大量代码 try { const r = await getStat(); // 新增:把需要传递给外层then的结果返回 return r; } catch (error) { console.log(error); // 新增:向外抛出错误,触发外层的catch回调 throw error; }; };
可选优化
如果不需要在
createPost内部打印错误日志,可以直接移除try/catch逻辑,内部异步报错会自动向外抛出,外层同样可以正常捕获:module.exports = async (p) => { // 此处省略大量代码 const r = await getStat(); return r; };
内容的提问来源于stack exchange,提问作者Sandra Schlichting
相关产品推荐
相关产品推荐

