异步等待未处于保持状态

时间:2020-07-01 09:19:59

标签: javascript node.js mongodb mongoose

我不知道为什么它首先打印data return而不是完成循环

代码

exports.put = async function (req, res, next) {
    const data = Array.from(req.body);
    let errors = false;
    data.forEach(async (update, index) => {
        try {
            const result = await TypeofAccount.findByIdAndUpdate(
                new mongoose.Types.ObjectId(update._id),
                {
                    $set: { name: update.name },
                },
                { new: true, runValidators: true },
            );
            console.log(index);
            if (!result) {
                errors = true;
                console.log('errors');
                return res.status(500).send();
            }
        } catch (e) {
            return res.status(500).send();
        }
    });
    console.log('data return');
    res.json(data);
};

  • 数据返回
  • 输入/ api // typeofaccount 200 5.551毫秒-202
  • 0
  • 1
  • 2

2 个答案:

答案 0 :(得分:0)

.for每个函数都是异步运行的,这就是为什么您可以看到在循环被首先打印后看到的console.log的原因

答案 1 :(得分:0)

发生此问题是因为您正在使用forEach循环,asyc等待不与forEach一起使用,为避免此问题,您的代码块应该像

for(let i in data){
try {
            const result = await TypeofAccount.findByIdAndUpdate(
                new mongoose.Types.ObjectId(data[i]._id),
                {
                    $set: { name: data[i].name },
                },
                { new: true, runValidators: true },
            );
            console.log(i);
            if (!result) {
                errors = true;
                console.log('errors');
                return res.status(500).send();
            }
        } catch (e) {
            return res.status(500).send();
        }
}