Angular2, машинописныеangular2 2 async call
У меня есть компонент, который отображает по одному объекту за раз с сервера.
При нажатии кнопки форма выполняет некоторые действия над объектом, отправляет данные на сервер. Сразу же в следующей строке получается следующий объект.
this.rawS.updateTags({......}); //Update object
this.candidateC.footerNavigateTo(.....);//Get next object
Но есть условие гонки, где Аякса, чтобы получить следующий объект достигнет сервера до Аякса updateTags достигнет сервера.
Кодекс updateTags является
updateTags(rawCandidate) {
this.baseAjaxService.doPost(this.baseUrl + 'tags/update', rawCandidate)
.subscribe(data => {
console.log(data);
});
}
Код для doPost является
doPost(url, inputParamJSON){
let httpResponse = this.http
.post(url, inputParamJSON, this.options)
.map(this.extractData)
.catch(this.handleAjaxError);
return httpResponse;
}
маршрут для 'continue_screening' имеет маршрут распознаватель, который приносит следующий объект.
Как я могу гарантировать, что footerNavigateTo() запускается только после того, как updateTags завершит полный цикл?
Это не состояние гонки. То, что вы делаете, вызывает 'this.candidateC.footerNavigateTo()' перед вызовом 'this.rawS.updateTags()' callback. Другими словами, вы не дожидаетесь завершения вызова AJAX, прежде чем действовать на него. @ Ответ Vincismique правильный, вам нужно использовать 'flatMap' для того, чтобы связать вызовы. Этот ответ также может помочь: https://stackoverflow.com/questions/34104638/how-to-chain-http-calls-in-angular2/34107312 –