首页 > 解决方案 > Sequelize.update() 拒绝在异步函数中工作并且不更新/不等待

问题描述

考虑代码:

const listOfEmployees = .... // get list of employees from god knows where ...
    
    
async function incrementHoursEmps(listOfEmployees) {
  listOfEmployees.map(async employeeId => {     
    const condition = { where : {employeeId} }; 
    const options = { multi: true };
    const values = { hoursWork: sequelize.literal('"hoursWork" + 1') };
    ModelEmployees.update(values, condition , options)
        .then(result => { 
            // ....
        })
        .catch(error => {
          console.log(error);
        });
    });
}
    
await incrementHoursEmps(listOfEmployees);

.update()每当我尝试使用of 方法更新多行(甚至只是单行)时Sequelize,代码永远不会等待,.update()并且不会真正更新。

它甚至工作还是我做错了什么?

标签: javascriptnode.jspostgresqlsequelize.js

解决方案


Array.map不知道异步。如果您想实现这种设置,您需要Array.map将列表转换为承诺,然后使用Promise.all等待所有承诺并返回结果数组。

const listOfEmployees = .... // get list of employees from god knows where ...
    
async function incrementHoursEmps(listOfEmployees) {
    return listOfEmployees.map(employeeId => {
        const condition = { where: { employeeId } };
        const options = { multi: true };
        const values = { hoursWork: sequelize.literal('"hoursWork" + 1') };
        return ModelEmployees.update(values, condition, options);
    });
}

await Promise.all(incrementHoursEmps(listOfEmployees));

推荐阅读