将 Promise.all 与 easyPost API 一起用于跟踪状态的多个请求

Posted

技术标签:

【中文标题】将 Promise.all 与 easyPost API 一起用于跟踪状态的多个请求【英文标题】:using Promise.all with easyPost API for multiple requests for tracking status 【发布时间】:2019-10-23 09:53:49 【问题描述】:

我需要输出一长串货物及其跟踪状态/跟踪URL

如果我同步运行它,那么它可能需要很长时间。因此,如果我异步运行它应该会更快,因为所有请求将同时运行,然后在全部完成后将所有信息返回到前端。

所以我仍在学习节点并使用 Promise,但是到目前为止我已经做到了......但问题是 Promise.all 似乎永远不会执行。所以我不确定我是否正确地执行了 Promise 函数,还是我不知道 easyPost API 的事情?

是的,现在我只使用 2 个货件 ID,但它可能会运行到 100 个或更多...

还有没有办法在取回货件时返回跟踪器元素,这样我就不必为每件货件打 2 次电话?

var promise = []
promise.push(getShipmentPromise('shp_xxxShipmentId'))
promise.push(getShipmentPromise('shp_xxxShipmentId2'))
Promise.all(promise)
   .then(response => 
      console.log('Sent - ' + req.method + req.originalUrl)
      console.log('promise.all complete.')
      // within an expressjs route
      res.json(batches)
   )
   .catch(err => 
      console.log(err)
   )        

    function getShipmentPromise (shipmentId) 
      return new Promise((resolve, reject) => 
        easyPostAPI.Shipment.retrieve(shipmentId).then(response => 
          console.log(response.created_at)
        )
      )
    

【问题讨论】:

【参考方案1】:

您需要解决或拒绝该承诺。如果你需要一个跟踪器元素,得到它然后解决。


function getShipmentPromise (shipmentId) 
      return new Promise((resolve, reject) => 
        easyPostAPI.Shipment.retrieve(shipmentId).then(response => 
          console.log(response.created_at)
          resolve(response)
        )
      )


【讨论】:

以上是关于将 Promise.all 与 easyPost API 一起用于跟踪状态的多个请求的主要内容,如果未能解决你的问题,请参考以下文章

await 与 Promise.all 结合使用

await 与 Promise.all 结合使用

关于Promise.all

es6 promise.all()

理解Promise.all,Promise.all与Promise.race的区别,如何让Promise.all在rejected后依然返回resolved状态

Promise.all() 与等待