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

使用https.get获取URL响应码无法存入数组或变量问题求解

Node.js https.get请求响应码无法存入数组问题解决方案

问题核心原因

你遇到的本质是Node.js异步IO执行顺序问题:
https.get是异步网络请求方法,循环调用时只会把所有请求发出去,不会等待请求返回结果就会直接执行后续的打印、插入数据库逻辑。此时请求的回调函数还没触发,resCode数组当然是空的,赋值操作本身是成功的,只是你读取数组的时机早于赋值时机。

修复方案

用Promise.all等待所有异步请求全部完成后,再执行依赖状态码数组的后续操作,示例代码如下:

const https = require('https');

// 将每个https.get请求封装为Promise
const requestPromises = results.map(element => {
  return new Promise((resolve) => {
    https.get(element.AppURLAndroid, function(res) {
      // 请求成功返回对应状态码
      resolve(res.statusCode);
    }).on('error', function(e) {
      console.error('请求出错:', e);
      // 请求失败返回自定义标识,比如0代表请求异常
      resolve(0);
    });
  });
});

// 等待所有请求全部执行完成
Promise.all(requestPromises).then(resCode => {
  // 此处获取的resCode就是按原数组顺序排列的所有状态码,可直接使用
  console.log('完整状态码数组:', resCode);
  // 插入数据库的逻辑必须写在这里,才能保证拿到完整的数组
  // 你的数据库插入代码...
}).catch(err => {
  console.error('批量请求处理异常:', err);
});

关键注意点

  • 所有需要用到resCode状态码数组的逻辑,必须放在Promise.all的then回调内部执行,否则无法保证所有异步请求都已返回结果。
  • Promise.all返回的结果顺序和你传入的请求数组顺序完全一致,不需要额外处理索引匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:57:01