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

JavaScript中如何等待Promise resolve?代码执行异常求助

如何从Promise中获取正确结果?

你的代码如下:

const findNum = async ()=>{
                setTimeout(()=>{
                    return 5;
                },1000)};

const getNum = async ()=>{
                    const  num = await findNum();
                    return num;
                    }
                     
 const number =  getNum();

console.log(number);

number.then((result)=>{
                    console.log(result);
                    });

执行后得到的结果:

Promise { <pending> }
undefined

问题根源

findNum虽然标记了async,但内部的setTimeout是独立的异步回调,async函数默认返回的Promise不会等待这个回调完成——回调里的return 5根本不会被外部捕获,所以findNum实际返回的是一个立即resolved的Promise,值为undefined,这就是你拿到undefined的原因。

修复方案

要让findNum真正等待1秒后返回结果,需要手动创建Promise,通过resolve传递异步结果:

// 手动封装Promise,等待setTimeout完成后传递结果
const findNum = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(5); // 用resolve把结果传递给Promise
    }, 1000);
  });
};

const getNum = async () => {
  const num = await findNum();
  return num;
};

// 方式1:用then获取结果
getNum().then((result) => {
  console.log(result); // 1秒后输出5
});

// 方式2:用顶层await(需环境支持,比如Node.js或浏览器模块)
// (async () => {
//   const number = await getNum();
//   console.log(number); // 1秒后输出5
// })();

补充说明

你看到的Promise { <pending> }是正常现象——Promise在未完成异步操作前就是pending状态,必须通过then或者await才能获取最终的resolved结果,不能直接打印Promise对象拿到值。

内容的提问来源于stack exchange,提问作者GeM_Steele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:06:22