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

Node.js函数异步请求未完成提前返回空数组 如何解决

问题根因

这是Node.js异步IO的典型执行顺序问题:

  • https.get是异步非阻塞方法,调用后不会立刻执行回调,会先执行完全部同步代码再处理异步回调
  • 你在for循环结束后同步打印foundUrls时,所有TestUrl内的请求回调都还没执行,所以数组为空
  • 原有completed_requests计数逻辑存在错误:你在循环里同步递增计数,而非请求完成后递增,高并发场景下会出现提前触发完成判断、结果统计不全的问题
修复后的代码

我们采用Promise + async/await的标准异步流程控制方案改造代码:

const https = require('https');

// 改造TestUrl为返回Promise的方法
function TestUrl(KeyworList, url, Color, Excludedurls) {
  return new Promise((resolve, reject) => {
    https.get(url, (res) => {
      let htmlcode2 = "";
      res.on('data', (d) => {
        htmlcode2 += d;
      })
      .on('end', () => {
        let isMatch = false;
        for (const keyword of KeyworList) {
          if (htmlcode2.toString().includes(keyword) && !(Excludedurls && url.includes(Excludedurls))) {
            isMatch = true;
            break;
          }
        }
        // 匹配成功返回url,失败返回null
        resolve(isMatch ? url : null);
      })
      .on('error', reject);
    }).on('error', reject);
  });
}

// 改造FindItemFromUrlList为async异步函数
async function FindItemFromUrlList(KeyworList, UrlList, Color, Excludedurls) {
  // 等待所有URL测试请求全部完成
  const results = await Promise.all(
    UrlList.map(url => TestUrl(KeyworList, url, Color, Excludedurls).catch(err => null))
  );
  // 过滤掉匹配失败、请求报错的项,得到最终匹配列表
  const foundUrls = results.filter(url => url !== null);
  console.log(foundUrls);
  return foundUrls;
}
调用方式

改造后的函数返回Promise对象,可以通过两种方式获取最终结果:

// 方式1:在async函数内用await调用
async function main() {
  const foundUrls = await FindItemFromUrlList(关键词列表, URL列表, 颜色参数, 排除URL参数);
  // 此处可以正常处理拿到的匹配结果
  console.log("匹配到的URL数量:", foundUrls.length);
}

// 方式2:用then链式调用
FindItemFromUrlList(关键词列表, URL列表, 颜色参数, 排除URL参数).then(foundUrls => {
  console.log("匹配到的URL:", foundUrls);
});
改造要点说明
  • 将异步回调逻辑封装为Promise是Node.js异步流程控制的标准实现,可避免多层回调嵌套问题
  • 通过Promise.all统一等待所有异步请求完成后再处理结果,流程逻辑更清晰
  • 移除了全局共享计数变量、数组传参逻辑,避免变量作用域污染和并发场景下的计数错误
  • 新增错误捕获逻辑,单个URL请求报错不会中断整个匹配流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 14:45:01