nodejs推入式数组在异步函数中不工作

iaqfqrcu  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(317)

这是我的密码。。。

var schedule =new Schedule(
            {
                flightNumber: req.body.flightNumber,
                status: req.body.status,
                pickDateTime: req.body.pickDateTime,
            });

            if(req.body.passenger.length > 0){

                await req.body.passenger.forEach(async function (data) {
                    var driver
                    await Driver.findOneAndUpdate({area:data.location_code,$expr: { $gt:["$vehicle_capacity", "$capacity_occupied"]}},{ $inc: { capacity_occupied: +1 } }).then((drivers) => {
                        driver = drivers._id
                    });                 
                    await schedule.passenger.push({
                        driver: driver,
                        dropLocation: req.body.dropLocation,
                        droplong: req.body.droplong,
                        picklong: data.long
                    })
                });
            }
            console.log(schedule.passenger);

当我尝试在异步函数内部访问schedule.passenger时,它正在工作,但当尝试在异步函数外部访问时,它不工作。

yvfmudvl

yvfmudvl1#

forEach(async function 将触发一组异步函数,一旦数组迭代完成,执行将移动到下一个代码块,而无需等待所有异步函数完成。
这可以通过使用 map 功能和回报的承诺,并等待所有这些。

let allPromises = req.body.passenger.map(async function (data) {
 //your code goes here
});

Promise.allSettled(allPromises).then(() => {
 console.log(schedule.passenger);
});

await schedule.passenger.push({ 是不正确的,因为 Array.prototype.push() 不是异步操作。

相关问题