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

Node.js使用https.request保存GET请求响应为变量时返回undefined问题

解决Node.js https GET请求异步响应无法存入变量的问题

问题根源

Node.js的网络请求是异步非阻塞的:res.on('end')事件只有在响应数据完全接收完成后才会触发,而你在req.end()之后直接执行的console.log('RESULTS: ' + finalResponse)是同步代码,此时响应还没接收完毕,finalResponse自然未被赋值,返回undefined。

解决方案

方案1:用Promise封装 + async/await(推荐)

将请求逻辑封装成Promise,通过async/await等待异步操作完成后获取结果:

const https = require('https');

// 封装带body的GET请求函数
function getWithBody(url, options, postData) {
  return new Promise((resolve, reject) => {
    let finalResponse = '';
    const req = https.request(url, options, (res) => {
      // 接收分片响应数据
      res.on('data', (chunk) => {
        finalResponse += chunk;
      });
      // 响应接收完成,返回结果
      res.on('end', () => {
        // 若返回JSON格式,可添加JSON.parse(finalResponse)转换为对象
        resolve(finalResponse);
      });
    });
    // 捕获请求错误
    req.on('error', (err) => {
      reject(err);
    });
    req.write(postData);
    req.end();
  });
}

// 使用示例
(async () => {
  try {
    // 替换为你的实际请求参数
    const results = await getWithBody(url, options, postData);
    console.log('RESULTS: ' + results);
    // 后续业务逻辑直接使用results即可
  } catch (err) {
    console.error('请求失败:', err);
  }
})();

方案2:使用回调函数

如果项目不支持async/await,可通过回调函数获取异步结果:

const https = require('https');

function getWithBody(url, options, postData, callback) {
  let finalResponse = '';
  const req = https.request(url, options, (res) => {
    res.on('data', (chunk) => {
      finalResponse += chunk;
    });
    res.on('end', () => {
      // 成功时传递结果
      callback(null, finalResponse);
    });
  });
  req.on('error', (err) => {
    // 失败时传递错误
    callback(err);
  });
  req.write(postData);
  req.end();
}

// 使用示例
getWithBody(url, options, postData, (err, results) => {
  if (err) {
    console.error('请求失败:', err);
    return;
  }
  console.log('RESULTS: ' + results);
  // 后续业务逻辑放在这里
});

注意事项

  • 务必初始化finalResponse为空字符串,避免出现undefined与数据拼接的异常
  • 如果第三方API返回JSON格式数据,记得在end事件中用JSON.parse(finalResponse)将字符串转为对象后再使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:57:24