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

如何实现checkVals函数等待异步getData执行完成后再运行?

让checkVals等待异步函数getData执行完成后再运行

问题核心

你的getData是异步函数(带async关键字),它返回的是Promise对象,直接调用后代码会继续执行checkVals,不会等待异步操作(比如fetch请求)完成,导致quData还未赋值就被打印。另外直接修改全局变量的写法易引发时序问题,更推荐通过异步函数返回值传递数据。


解决方案1:使用async/await(最直观)

把调用逻辑放在async函数里,用await等待getData执行完成,再调用checkVals。同时优化getData,不再依赖全局变量:

优化后的带fetch的getData

async function getData() {
  const res = await fetch("http://localhost:9000/testAPI/api/upload", {
    method: "GET",
    headers: { "content-type": "application/JSON" },
  });
  const data = await res.json();
  // 直接返回处理后的数据,无需修改全局变量
  return {
    Title: data.Title,
    Question: data.Question,
    DoC: data.DoC,
  };
}

优化后的不带fetch的getData

async function getData() {
  const data = {
    Title: "Title",
    Question: "Question",
    DoC: "DoC"
  };
  return {
    Title: data.Title,
    Question: data.Question,
    DoC: data.DoC,
  };
}

修改checkVals(接收参数,摆脱全局变量依赖)

const checkVals = (quData) => {
  console.log(quData);
};

调用逻辑

// 用async函数包裹初始化流程
async function init() {
  const quData = await getData();
  checkVals(quData);
}

// 执行初始化
init();

解决方案2:使用Promise的.then()链式调用

如果不想用async/await,可直接通过Promise链式调用,在getData的异步操作完成后执行checkVals:

调用代码

getData().then(quData => {
  checkVals(quData);
});

(getData和checkVals使用上面优化后的版本即可)


不推荐方案:依赖全局变量(仅作参考)

若你坚持保留全局变量quData,可在getData的Promise完成后再调用checkVals,但这种写法易引发变量污染和时序问题:

// 用then链式调用
getData().then(() => {
  checkVals();
});

// 或用async/await
async function init() {
  await getData();
  checkVals();
}
init();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:42:45