Сделать HTTP-запрос для ожидания определенного свойства в ответ

#node.js #angular #api

#node.js #angular #API

Вопрос:

У меня есть стандартный http.post запрос к внешнему API моей компании по доставке посылок. К сожалению, иногда, когда я добавляю новую посылку, ответ, который должен содержать номер отслеживания, возвращает это свойство как null. Я понял, что для его генерации требуется определенный период времени, поэтому я добавляю тайм-аут и записываю его следующим образом:

 this.order.id = '11111111'

const data:any = {
  //object of parcel        
}


this.addParcel(data) //POST request
  .subscribe(
    response => {
      //this returns parcel object with id that is needed to get tracking_number
      setTimeout( () =>
        this.getTrackingNumber(response.id) //GET request
          .subscribe(
            response2 => {
              const shipment = {
                waybill: response2.tracking_number,
              }
              this.addTrackingNumber(this.order.id, shipment)
                .subscribe(
                  response3 => {
                    console.log('success', response3);
                  },
                  error => console.log('oops', error)
                );
            },
            error => console.log('oops', error)
          ),
      1000);
    },
    error => console.log('oops', error)
  );
  

И в большинстве случаев это работает так, как ожидалось, но иногда функция getTrackingNumber() возвращает

tracking_number

свойство с нулевым значением, поскольку время, необходимое для его генерации, не указано.

Итак, у меня вопрос: есть ли какой-либо возможный способ заставить http-запрос ждать, пока свойство tracking_number не станет равным null?

Я также думал вызвать его снова, если он вернет tracking_number: null, но я не думаю, что это хорошая практика. К сожалению, setTimeout также не является идеальным решением, поскольку период времени, необходимый для генерации tracking_number, отличается, иногда это практически не занимает времени, а иногда даже превышает заданные 1000 мс.

В этом проекте я использую Angular и Nest.js таким образом, у меня есть возможность записать его также на стороне интерфейса или серверной части.

Спасибо за любые идеи.

Приветствую.