异步/等待未按顺序执行

时间:2019-10-07 09:15:34

标签: node.js mongodb mongoose

如何解决此问题?我总是得到1000的余额。我希望余额为3000。

var checked = [{ _id: '5d96a7ba5ccc6a5850ee5ae7'}, {_id: '5d96a7ba5ccc6a5850ee5ae7' }, {_id: '5d96a7ba5ccc6a5850ee5ae7}];
var income = 1000;

checked.forEach(async x => {

    let balance = CustomerBalanceModel.findOne({user_id: x._id}).exec();

    let balanceValue = {
        balance: (balance + income),
        user_id: x._id,
        updated_at: dateFormatter.date(date)
    }
    await CustomerBalanceModel.findOneAndUpdate({user_id: x._id}, balanceValue, { upsert: true, new: true }).exec();
})

1 个答案:

答案 0 :(得分:1)

您忘记在第一次异步操作之前输入await

let balance = await CustomerBalanceModel.findOne({user_id: x._id}).exec(); 

因此,只需在await之前添加CustomerBalanceModel.findOne(...)