使用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
相关产品推荐
相关产品推荐

