繁体   English   中英

JavaSctript Promise.all 上 map

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM