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

Sequelize.update()在异步函数中不等待、不执行更新问题咨询

是你的使用方式存在错误,核心有两个问题:

1. 异步逻辑未正确处理

  • 你在map中定义的异步回调没有返回update方法生成的Promise,也没有收集所有异步任务并等待执行完成,导致外层await incrementHoursEmps不会等待内部的更新操作结束,函数会直接返回。

2. update方法传参格式错误

  • Sequelize的update方法仅接收两个入参:第一个为要更新的字段值对象,第二个为包含查询条件、执行配置的全量options对象。你将where条件、multi配置拆成了第二、第三个独立参数传入,框架无法识别到查询条件,自然不会触发数据更新。

修正后的参考代码:

const listOfEmployees = .... // 从对应逻辑获取员工列表
    
async function incrementHoursEmps(listOfEmployees) {
  // 收集所有更新任务的Promise
  const updatePromises = listOfEmployees.map(employeeId => {
    return ModelEmployees.update(
      { hoursWork: sequelize.literal('"hoursWork" + 1') },
      // 所有配置统一放到第二个参数内
      { 
        where : { employeeId },
        multi: true 
      }
    ).catch(error => {
      console.log(error);
    });
  });
  // 等待所有更新任务执行完成
  await Promise.all(updatePromises);
}
    
await incrementHoursEmps(listOfEmployees);

如果所有员工的更新逻辑一致,建议直接用in条件批量更新,不需要循环调用,性能更高:

async function incrementHoursEmps(listOfEmployees) {
  await ModelEmployees.update(
    { hoursWork: sequelize.literal('"hoursWork" + 1') },
    { 
      where: { employeeId: listOfEmployees },
      multi: true
    }
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:39:04