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

Waterline调用stream方法时eachBatch回调无法触发问题咨询

问题原因分析

你遇到的eachBatch无输出的问题,是使用方式不匹配当前Waterline版本的API规则导致的,核心问题有两点:

  • 回调参数格式错误:Sails v1.x及之后的版本中,eachBatch 已不再使用(err, records)的错误优先回调格式,回调的第一个入参直接是当前批次的记录数组,错误需要通过外层try/catch或者链式.catch()捕获。你写的回调把第一个参数当成错误对象,自然不会执行打印逻辑。
  • 缺少异步执行触发逻辑:你测试eachRecord时添加了await等待异步流执行完成,但eachBatch的调用既没有加await,也没有挂载exec执行回调,程序很可能在流处理完成前就提前退出,导致无输出。

正确使用示例

推荐使用async/await模式适配新版API:

try {
  await MyModel.stream({ isSubscribed: true })
    .populate("user")
    .eachBatch(10, async (records) => {
      console.log("Code reached inside stream results,当前批次条数:", records.length)
    })
  console.log("所有批次处理完成")
} catch (err) {
  console.error("流处理出错:", err)
}

如果是兼容旧版本Waterline,需要补充exec触发执行:

MyModel.stream({ isSubscribed: true })
  .populate("user")
  .eachBatch(10, function(err, records){
    if (err) {
      console.error("批次处理错误:", err)
      return
    }
    console.log("Code reached inside stream results")
  })
  .exec(function (err) {
    if (err) console.error("整体流处理错误:", err)
  })

补充说明

你使用find方法时调用了exec触发执行、使用eachRecord时添加了await等待执行,所以这两个调用都能正常输出,和查询条件、关联查询逻辑无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:45:04