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

Node.js如何实现for循环按时间间隔迭代完成订单自动派单需求

Node.js 订单定时推送司机实现方案

完全可以实现你需要的逻辑,普通同步for循环不支持等待间隔,你可以结合async/await+Promise延时的方案实现,具体逻辑如下:


核心实现思路

  • 封装通用延时工具函数sleep,用于实现拒单后的等待逻辑
  • 单个订单的司机推送流程串行执行:推送给当前司机→等待司机反馈→拒单则等待30秒→推送给下一位司机,接单则直接终止当前订单的匹配流程
  • 多个订单之间默认并行处理,避免所有订单排队等待导致的匹配超时,也可根据业务需求调整为串行执行

完整代码示例

// 1. 封装延时工具函数,参数单位为毫秒
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

// 2. 单个订单的司机匹配逻辑
async function matchOrderDrivers(order, drivers, retryDelay = 30 * 1000) {
  for (const driver of drivers) {
    console.log(`给订单${order}推送司机${driver}`);
    // 调用实际的司机接单判断逻辑,等待司机反馈
    const isAccept = await checkDriverAccept(order, driver);
    if (isAccept) {
      console.log(`司机${driver}接了订单${order},匹配完成`);
      return { order, driver, status: 'success' };
    }
    console.log(`司机${driver}拒单,等待${retryDelay/1000}秒后推送下一位司机`);
    // 拒单后等待指定时间再进入下一轮循环
    await sleep(retryDelay);
  }
  // 所有司机都拒单的兜底逻辑
  console.log(`订单${order}所有司机均拒单,匹配失败`);
  return { order, status: 'failed' };
}

// 模拟司机接单判断的接口,可替换为实际业务逻辑
async function checkDriverAccept(order, driver) {
  // 此处可替换为推送司机通知、等待司机端返回等实际业务逻辑
  return Math.random() > 0.8; // 模拟20%的接单概率
}

// 3. 批量处理所有订单(并行版本)
async function batchMatchOrders(orders, drivers) {
  // 所有订单并行发起匹配,互不阻塞
  const matchPromises = orders.map(order => matchOrderDrivers(order, drivers));
  const results = await Promise.allSettled(matchPromises);
  console.log('所有订单匹配完成,结果:', results);
}

// 测试调用
const orders = Array.from({length: 100}, (_, i) => i + 1);
const drivers = Array.from({length: 50}, (_, i) => i + 1);
batchMatchOrders(orders, drivers);

可选调整说明

  • 如果业务要求订单必须按顺序匹配,不能并行,可以把batchMatchOrders里的map+Promise.allSettled替换为普通for循环+await,逐个处理订单即可
  • 延时时间可根据业务场景动态调整,比如高峰时段缩短推送间隔,低峰时段拉长间隔
  • 建议添加单个订单匹配超时兜底逻辑,避免无限等待消耗资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:18:00