You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异步函数返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:54:31