В моем приложении для вызова всех запросов POST
я использовал service
.
Когда я получаю определенный код (E.x: 401) с сервера, я вызываю API для получения нового токена.
До получения другого токена, если есть какой-либо другой вызов API, я сохраняю все эти запросы в массиве. Это может быть n запросов. Пока предположим, что есть 3 вызова API, в то время как выполняется вызов newToken API.
Как только я получаю новый токен, я должен передать его во все последующие API. Теперь я должен выполнить все ожидающие запросы API и предоставить данные для соответствующих вызовов.
Пример кода:
api.service.ts
POST(URL , param){
return new Observable<any>(observer => {
let headers = new HttpHeaders({
'Content-Type': 'Content-Type': 'application/json'
});
let options = {
headers: headers
};
this.http.post(URL, param, options)
.subscribe(data => {
var apiRes: any = data;
this.inValidSession();
observer.next();
observer.complete();
}
......
// For execute pending request I have set this
for (let i = 0; i < this.queue.length; i++) {
this.REPOST(this.queue[i].param, this.queue[i].url).subscribe((queueResponse) => {
observer.next(queueResponse);
observer.complete();
this.queue.shift();
});
}
}
user.component.ts
ngOnInit(){
this.getUserData();
this.getProductData();
}
getUserData(){
this.apiService.post({},'/apiName').subscribe((response) => {
console.log(response);
})
}
getProductData(){
this.apiService.post({},'/apiName2').subscribe((response) => {
console.log(response);
})
}
Проблема в том, что при выполнении всех ожидающих API я получаю данные в консоли. Но не subscribe
из служебного файла для соответствующей функции .ts
файла.
Примечание: я получаю подписанные данные только в одной функции, а не в каждой. Другими словами, я получаю оба API в функции getProductData()
. Я не знаю почему.
Пожалуйста, помогите мне, если у кого-то есть решение.