如何在async/await执行完成后打印createPost()的返回值
问题解答
核心结论
你当前的代码写法已经天然满足「createPost()完全执行完成后才打印ret值」的需求,完全无需担心日志提前触发的问题。
原因说明
await关键字的作用就是暂停当前async函数的执行,等待其后的异步任务决议完成后再继续执行后续代码。你写的ret = await createPost(p)会一直等到createPost内部的axios请求完成、返回r.data.key并赋值给ret后,才会执行下一行的打印逻辑,不会出现时序问题。- 你顾虑的「同步代码先于异步代码执行」的规则在这里不生效,
await已经将后续的打印操作转为等待createPost完成后才会触发的异步任务,时序完全可控。
可选优化
由于ret变量仅用于日志打印,你可以直接省略变量声明,简化代码,同时也不需要在while循环外部提前定义变量:
module.exports = async (p) => { try { while (true) { switch (x) { case 1: isOk = await getStatusCode({ ... }); break case 2: isOk = await getString({ ... }); break default: throw ""; }; // 直接在日志内等待createPost返回结果即可 appLogger.info(`Created post: ${await createPost(p)}`); } } catch (error) { appLogger.error(error); } }
注:你提供的示例代码里while(true)没有终止逻辑、x变量未定义,属于你删除无关代码导致的缺失,实际业务场景补充对应逻辑即可。
内容的提问来源于stack exchange,提问作者Sandra Schlichting
相关产品推荐
相关产品推荐

