Sequelize.update() 拒绝在异步函数中工作并且不更新/不等待
Sequelize.update() refuses to work in async function and doesn't update / doesn't await
考虑代码:
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);
每当我尝试使用 Sequelize
的 .update()
方法更新多行(甚至只是一行)时,代码永远不会等待并且 .update()
不会真正更新。
它还能正常工作还是我做错了什么?
Array.map
不支持异步。如果你想实现这种设置,你需要使用 Array.map
将你的列表转换为承诺,然后使用 Promise.all 等待所有承诺和 return 结果数组。
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));
考虑代码:
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);
每当我尝试使用 Sequelize
的 .update()
方法更新多行(甚至只是一行)时,代码永远不会等待并且 .update()
不会真正更新。
它还能正常工作还是我做错了什么?
Array.map
不支持异步。如果你想实现这种设置,你需要使用 Array.map
将你的列表转换为承诺,然后使用 Promise.all 等待所有承诺和 return 结果数组。
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));