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

如何在NodeJS中按照优先级值升序执行HTTP请求?

Node.js 按优先级串行发送HTTP请求实现方案

前置说明

os.setPriority是操作系统层面用于调整进程/线程调度优先级的API,和你需要实现的业务逻辑层面的请求执行顺序优先级无关,不要用这个API实现当前需求。

实现思路

  • 先预处理请求数组:给没有priority字段的项默认赋值为1,再按priority数值升序排序
  • 按排序后的顺序串行执行请求:每完成一个请求再发起下一个,单个请求的成功/失败不中断后续请求执行

完整可运行代码

// 原生Node.js >= 18 自带fetch,无需安装第三方依赖
const requestArray = [
  {
    url: "http://google.com",
    priority: 4
  },
  {
    url: "http://facebook.com",
    priority: 1
  },
  {
    url: "http://failed.example.gibberish.com",
    priority: 2
  },
  // 测试无priority的项
  { url: 'http://jsonplaceholder.typicode.com/posts' }
];

async function runPriorityRequests(requests) {
  // 1. 预处理数组:补全默认优先级 + 排序
  const sortedRequests = requests
    .map(item => {
      // 缺失priority时默认赋值1
      return {
        ...item,
        priority: item.priority ?? 1
      }
    })
    // 按priority升序排序,数值越小越先执行
    .sort((a, b) => a.priority - b.priority);

  // 2. 串行执行请求
  for (const req of sortedRequests) {
    console.log(`\n开始请求:${req.url},优先级:${req.priority}`);
    try {
      const response = await fetch(req.url);
      // 可根据需要调整响应处理逻辑,比如获取JSON格式返回
      const result = await response.text();
      console.log(`请求成功,响应长度:${result.length}字节`);
    } catch (err) {
      console.log(`请求失败,错误信息:${err.message}`);
    }
  }
}

// 执行函数
runPriorityRequests(requestArray);

关键逻辑说明

  • 优先级补全用??空值合并运算符,只有priority为undefined时才会赋值默认值1,不会覆盖合法的0值等边界情况
  • 排序逻辑直接用数值相减实现升序,相同优先级的项会保持原数组中的相对顺序
  • 串行执行用for...of配合await实现,不要用forEach,后者内部的await不会阻塞外层循环,会导致请求并发执行不符合需求
  • 每个请求单独用try/catch包裹,单个请求失败不会中断后续请求的执行,符合无论成败都打印结果的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:06