Как вызвать несколько API и подписаться на angular 6? - PullRequest
0 голосов
/ 26 октября 2018

В моем приложении для вызова всех запросов 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(). Я не знаю почему.

Пожалуйста, помогите мне, если у кого-то есть решение.

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете использовать

forkJoin()

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

например

    forkJoin(Service1.call1, 
     Service2.call2)
    .subscribe(([call1Response, call2Response]) => {

Где service1 и service2 - это сервисы, имеющие функции ccall1 и call2, имеющие return тип Observable

Вы можете найти больше Здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...