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

Node.js如何等待异步函数返回数据后再执行下一行代码

问题根因

你当前两个方案都失效的核心原因是state.js中的test函数没有显式返回任何值,setTimeout回调函数的return不会被外层test函数接收,因此不管怎么调用test,默认返回值都是undefined:

  • async/await只能等待Promise对象完成,对无返回值的普通函数不会等待,执行await t('some string')会立即得到undefined,后续访问v.value自然会抛出报错
  • setInterval方案中每次循环都会重新调用一次test,每次都会触发新的10秒定时器,永远不可能拿到返回值
修正方案(标准Promise异步实现)

1. 修改state.js代码

将test函数改造为返回Promise对象的异步函数,在定时器中调用resolve返回结果:

function test(val){
    // 显式返回Promise对象
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve({
                code: 0,
                value: val
            })
        }, 10000);
    })
}

module.exports = test;

2. 修改app.js代码

首先引入state.js导出的test函数,再用async/await调用即可:

// 引入state模块,路径根据你实际文件存放位置调整即可
const t = require('./state.js')

async function runNow(){
    let v = await t('some string');
    console.log(v.value)
}

runNow();

运行后等待10秒即可正常打印some string结果,无需额外使用setInterval轮询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:54:03