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
相关产品推荐
相关产品推荐

