[英]JavaSctript Promise.all on map
我有一个 function 从数据库中检索车辆列表。 这需要被映射,为这些车辆中的每一个发送另一个请求。 然后将结果推送到数组。
我的问题是我需要能够等到所有车辆都被循环并直到 bucketStopVehcilesPosition 收集所有数据。 然后继续其他代码。
我在这方面失败了,因为 map function 完成得更快,并且不关心对数据库的第二个请求。 我最终检索了这些,但代码已经完成。 所以 console.log 会产生一个空数组。
这不是我第一次遇到这个问题。 有没有人有这种问题的任何模式解决方案?
非常感谢您的建议。
AdminTable.getStopVehiclesPosition()
.then((result) => {
return Promise.all(result.map((item) => {
AdminTable.getLatestPosition({vehicleId: item.vehicleId})
.then((data) => {
bucketStopVehiclesPosition.push({
vehicleId: item.vehicleId,
plateNumber: item.plateNumber,
lat: data.position.coords.lat,
lon: data.position.coords.long,
heading: data.position.coords.heading,
speed: data.position.coords.speed
})
})
}))
.then(() => {
console.log(bucketStopVehiclesPosition)
})
})
如果你想按顺序解决你的承诺,你需要使用reduce
。 map
是同步的。
AdminTable.getStopVehiclesPosition()
.then((result) =>
result.reduce( async (previousPromise, item) => {
await previousPromise;
return AdminTable.getLatestPosition({vehicleId: item.vehicleId})
.then((data) => {
bucketStopVehiclesPosition.push({
vehicleId: item.vehicleId,
plateNumber: item.plateNumber,
lat: data.position.coords.lat,
lon: data.position.coords.long,
heading: data.position.coords.heading,
speed: data.position.coords.speed
})
});
}, Promise.resolve())
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.