我正在从循环中更新特定模型。它基本上将一个号码分配到多个记录中,直到号码消失为止。不过有时候,这个数字可能太多了,所以循环结束时还会剩下一些。现在,当发生这种情况时,我想将剩下的金额放入循环中更新的表之一中。
我正在获取要更新的确切记录,但是它的数量反映了循环中更新之前的数量,但是在数据库中它已正确更新。
我的console.log()显示运行时确实执行了正确的命令。每个订单首先在循环中执行,然后消失。
下面只是一个示例
amount = 900
ModelName=[{'current_balance':100,'id':1},{'current_balance':90,id:2}]; // Schema structure
for(let i=0; i<2; i++){
//update records
console.log('updating row ' , i);
const currentBalance= updateRecords[i]['current_balance']
const newBalance= 30+ currentBalance
db.ModelName.update({balance:newBalance})
amount= amount - 30;
}
// do we have amount left?
if (amount >0){
console.log('remain amount')
// with Sequelizer SELECT, I am getting the latest record sucesssfully. After adding 30 to it in the looop, here its balance should have been 120. But I still get 90
}
控制台输出为
updating row 0
updating row 1
remain amount
并且在循环完成后数据库包含正确的信息,但是当我在循环结束时检查时,仍然看到循环之前的原始值。
答案 0 :(得分:0)
问题:
for(let i=0; i<2; i++){
//update records
console.log('updating row ' , i);
const currentBalance= updateRecords[i]['current_balance']
const newBalance= 30+ currentBalance
db.ModelName.update({balance:newBalance}) // <---- ISSUE IS HERE
amount= amount - 30;
}
您正在循环,但不等待更新完成,应该等待更新完成,然后转到下一个更新
解决方案:
如果您正在使用async/await
,则应像这样使用它:
async function FUNCTION_NAME() { // <----- async should be here
...
await db.ModelName.update({balance:newBalance}); // <----- await should be here
....
}
或 Promise.all
let promises = []; // <---- HERE
for(let i=0; i<2; i++){
//update records
console.log('updating row ' , i);
const currentBalance= updateRecords[i]['current_balance']
const newBalance= 30+ currentBalance
promises.push(db.ModelName.update({balance:newBalance})) // <---- HERE
amount= amount - 30;
}
if (amount >0){
Promise.all(promises).then(data => {
console.log('remain amount'); // <---- CHECK HERE
});
}