использование Promise.all с API easyPost для нескольких запросов на отслеживание статуса - PullRequest
0 голосов
/ 23 октября 2019

Мне нужно вывести длинный список отправлений и их отслеживание. Состояние / отслеживание URL.

Если я выполняю это синхронно, то это может занять очень много времени. Поэтому, если я запускаю его асинхронно, это должно быть быстрее, так как все запросы будут выполняться одновременно, а затем вернуть всю информацию во внешний интерфейс, когда все это будет сделано.

Так что я все еще учусь в узле и используюобещания, однако я до сих пор получил это ... но проблема в том, что Promise.all, кажется, никогда не выполняется. Поэтому я не уверен, правильно ли я выполняю функцию «Обещание» или я не знаю, что такое easyPost API?

. Да, сейчас я просто использую 2 идентификатора отгрузки, но это можетпробег до 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 Ответ

1 голос
/ 23 октября 2019

Вам необходимо разрешить или отклонить обещание. Если вам нужен элемент отслеживания, получите его, а затем разрешите.


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

...