NodeJs 推入数组在异步函数中不起作用
Posted
技术标签:
【中文标题】NodeJs 推入数组在异步函数中不起作用【英文标题】:NodeJs push in array not working within the async function 【发布时间】:2021-10-02 07:10:31 【问题描述】:这是我的代码...
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 时,它正在工作,但是当我尝试访问异步函数外部时,它不起作用。
【问题讨论】:
重复Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference 嗯,它与异步有关,我无法理解你为什么在数组函数中使用 await。我很好奇。 【参考方案1】: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()
不是异步操作。
【讨论】:
是不是也和变量作用域有关? 哪个变量? schedule.passenger,我也看不到对象中的乘客数组。 因为schedule
在外部范围内,因此可以添加属性并将其可用。但是await schedule.passenger.push(
不正确,因为Array.prototype.push()
不是异步操作。
@RajdeepDebnath 你是个了不起的男孩......谢谢你让我开心以上是关于NodeJs 推入数组在异步函数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章