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

JS新手使用Axios调用API遇异步执行顺序异常问题求助

核心问题原因

和你熟悉的C++、Python默认同步执行的逻辑不同,JS的网络请求默认是异步非阻塞的,不会卡住主线程等请求返回再往下走。你定义的getAPIData是async异步函数,调用它不会阻塞后续代码执行,只会立刻返回一个Promise对象,你现在直接把这个Promise赋值给jsonData,当然拿不到真实的接口返回值,后续formatData自然就提前空跑了。

正确实现方案

你只需要把主执行逻辑改成异步串行的顺序即可,推荐用和你现有代码风格统一的async/await写法:

let jsonData = [];
const formattedData = [];

async function getAPIData() {
  console.log('Start getAPIData');
  const response = await axios.get('https://myurl.domain/api', {
    headers: {
      crossDomain: true,
      'app-id': 'won\'t tell',
      'app-secret': 'won\'t tell either'
    }
  });
  console.log(response.data);
  console.log('End getAPIData');
  // 直接返回接口真实数据,避免全局变量传递的隐患
  return response.data;
}

// 把要处理的原始数据当参数传入,逻辑更可控
function formatData(rawData) {
  console.log('Start formatData');
  /* 在这里把rawData处理成你需要的格式,写入formattedData即可 */
  console.log('End formatData');
}

function updateHTMLWithData() {
  // 这里写Vue更新表格的逻辑,此时formattedData已经有处理好的内容
}

// 主执行逻辑包成async函数,用await保证执行顺序
async function main() {
  console.log('Start Main Code');
  // await会等getAPIData请求完成、拿到返回值再执行后续代码
  jsonData = await getAPIData();
  console.log('After getAPIData'); 
  formatData(jsonData);
  updateHTMLWithData();
  console.log(formattedData);
  console.log('Fin du script');
}

// 页面加载后自动执行主逻辑
window.onload = main;

Vue绑定数据优化建议

如果用Vue实现页面更新,建议直接把formattedData定义为Vue的响应式变量,处理完数据直接赋值即可自动触发页面渲染,参考结构如下:

<!-- 页面结构示例 -->
<div id="app">
  <h1>数据展示页</h1>
  <table border="1">
    <thead>
      <tr>
        <th>字段1</th>
        <th>字段2</th>
        <!-- 补充其他表头字段 -->
      </tr>
    </thead>
    <tbody>
      <tr v-for="item in formattedData" :key="item.id">
        <td>{{item.field1}}</td>
        <td>{{item.field2}}</td>
        <!-- 补充其他表格字段 -->
      </tr>
    </tbody>
  </table>
</div>

<script>
const app = Vue.createApp({
  data() {
    return {
      formattedData: []
    }
  },
  // Vue的mounted钩子会在页面加载完成后自动执行
  async mounted() {
    const rawData = await getAPIData();
    // 直接给响应式变量赋值,页面会自动更新
    this.formattedData = formatData(rawData);
  }
}).mount('#app')
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:02