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

JavaScript中如何使用axios发起同步HTTP GET请求

问题本质

你当前的代码无法拿到正确返回值,原因很明确:

  • axios.get 是异步方法,返回值为Promise对象,执行return response.data时HTTP请求还未完成,此时response不是最终的响应对象,读取到的data为undefined。
  • 限制函数不能声明为async,就无法在函数内使用await等待Promise状态变更,因此原生axios的用法不可能实现你的需求。
  • 重要提示:同步HTTP请求会阻塞当前执行线程,请求返回前所有后续代码、页面渲染(浏览器环境)、事件循环(Node环境)都会暂停,非极端场景不建议使用
实现方案

axios本身不提供同步请求能力,你需要替换请求实现,保持load()的函数声明形式完全不变,直接返回接口数据:

Node.js 环境

方案1:使用同步请求依赖(推荐)

安装支持同步调用的请求库sync-fetch:
npm install sync-fetch
函数实现:

const fetch = require('sync-fetch');
function load() {
  const res = fetch('https://你的目标请求地址');
  // 接口返回JSON数据用res.json(),返回纯文本/其他格式改用res.text()等对应方法
  return res.json();
}

方案2:无第三方依赖实现

借助Node内置子进程模块调用curl完成同步请求,不需要额外安装依赖:

const { execSync } = require('child_process');
function load() {
  const rawRes = execSync('curl -s "https://你的目标请求地址"', { encoding: 'utf8' });
  // 返回JSON数据就执行解析,返回纯文本直接return rawRes即可
  return JSON.parse(rawRes);
}

浏览器环境

直接用原生同步XMLHttpRequest实现,无需引入任何依赖:

function load() {
  const xhr = new XMLHttpRequest();
  // open第三个参数传false代表同步发起请求
  xhr.open('GET', 'https://你的目标请求地址', false);
  xhr.send(null);
  if (xhr.status >= 200 && xhr.status < 300) {
    // 返回JSON数据就解析,返回文本直接return xhr.responseText
    return JSON.parse(xhr.responseText);
  }
  throw new Error(`请求异常,状态码:${xhr.status}`);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:06:22