异步函数返回Promise {pending} 无法获取结果的解决方案咨询
问题原因
你看到的Promise {pending}是因为所有async函数的返回值永远是Promise对象——哪怕你在函数里用return await返回了具体值,这个值也会被自动包装成resolved状态的Promise。你直接执行let result = okay()时,异步操作还没完成,所以Promise处于pending状态,打印出来就是这个结果。
第一个代码能正常输出,是因为你在async函数内部用了await,等待getTimezoneLabel的异步操作完成后才打印结果;而第二个代码没有等待Promise完成,直接打印了未完成的Promise对象。
解决方案
下面是几种正确获取异步结果的方式:
1. 在自执行async函数中使用await
把获取结果和打印的逻辑放在async函数里,用await等待Promise完成:
const okay = () => getTimezoneLabel(timezone); // 直接返回原Promise,无需额外async包装 // 自执行async函数 (async () => { let result = await okay(); console.log(result); })();
2. 使用Promise的.then()方法
通过Promise的回调函数处理完成后的结果:
const okay = () => getTimezoneLabel(timezone); okay().then(result => { console.log(result); });
3. 顶层await(仅支持特定环境)
如果你的代码运行在支持顶层await的环境(比如Node.js ESM模块、现代浏览器脚本),可以直接在顶层使用await:
const okay = () => getTimezoneLabel(timezone); let result = await okay(); console.log(result);
额外优化
okay函数完全不需要包装成async函数,因为getTimezoneLabel本身就是async函数,返回的就是Promise,所以直接返回它即可,代码更简洁且效果一致。
内容的提问来源于stack exchange,提问作者Idris
相关产品推荐
相关产品推荐

