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