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

如何结合await与setTimeout使用?解决getData函数返回null问题

问题根源

await 仅能等待Promise对象完成,但setTimeout返回的是一个数字类型的定时器ID,并非Promise。所以你的代码里await setTimeout(...)根本不会等待1.5秒,会直接执行后续的console.log(x)和return x,此时x还是初始的null。

正确实现方式

方式一:把setTimeout封装成Promise

将定时器逻辑包装进Promise,触发时通过resolve传递计算结果,让await能正确等待异步操作完成:

showData = (data) => {
    console.log("showing", data)
}
getData = async (a,b) => {
    const result = await new Promise((resolve) => {
        setTimeout(() => {
            resolve(a * b);
        }, 1500);
    });
    console.log(result); // 1.5秒后输出200
    return result;
}
// 调用async函数需处理其返回的Promise
getData(10,20).then(data => {
    showData(data); // 1.5秒后输出showing 200
});

方式二:直接返回Promise(简化版)

如果getData里不需要额外同步操作,也可以直接返回Promise:

showData = (data) => {
    console.log("showing", data)
}
getData = (a,b) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(a * b);
        }, 1500);
    });
}
// 在async函数中用await接收结果
async function execute() {
    const x = await getData(10,20);
    console.log(x); // 200
    showData(x);
}
execute();
注意点
  • async函数本身返回的是Promise,所以调用时要么用.then()链式处理结果,要么在另一个async函数内部用await接收。
  • 所有非Promise的异步API(比如setTimeout、setInterval),都需要先包装成Promise才能和async/await配合使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:40:31