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
相关产品推荐
相关产品推荐

