Как использовать возвращаемое значение второй подписки в первой работающей подписке синхронно в угловом режиме 6. - PullRequest
0 голосов
/ 05 октября 2018

Я использую приложение Angular 6.В моем случае у меня есть одна ситуация, в которой я должен вызвать другой API и получить данные, а затем перейти к первому API, а затем возобновить API.

Например: :: в .ts файле

logout(){
  this.apiService.POST({}, "logout").subscribe((response: any) => 
  {
      alert("Logout subscribed returns...");
  }
}

В api.service.ts файле.

POST(param, apiName) {
     var URL = Config.POST_ENDPOINT_URL + apiName; // Make whole API string

     return this.http.post(URL, param, options)
       .map(data => {
             // Hear I have to call another HTTP API call 
             // if I got specific status code in data. 
             var apiRes: any = data;

             if(apiRes.code == 500){
                   // Hear I need to call another API call 
                   this.another()subscribe((anotherResponse) => {
                      console.log("anotherResponse :::" , anotherResponse);

                   // Now the main issue is come in picture. I need data form

                   // anotherRespose and pass in POST to continue API call. 

                   // In short , I need to again call POST function with new data. 
                   })
             }

       });

}


another(): Observable<any> {
    return this.http.post(URL, obj, options)
      .map(data => {          
        alert("another data return...");
        return data;  // Need to pass this data
      })
}

Кроме того, когда я звоню logout(), он возвращает подписку, когда another() работает.Итак, мне нужно настроить свой поток в синхронизации.Заранее спасибо.

Ответы [ 2 ]

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

Попробуйте это

POST(param, apiName) {

 return new Observable<number>(observer => {

    var URL = Config.POST_ENDPOINT_URL + apiName; // Make whole API string

    this.http.post(URL, param, options)
        .subscribe(data => {
            // Hear I have to call another HTTP API call 
            // if I got specific status code in data. 
            var apiRes: any = data;

            if(apiRes.code == 500){
                // Hear I need to call another API call 
                this.another()subscribe((anotherResponse) => {
                    console.log("anotherResponse :::" , anotherResponse);

                    observer.next(anotherResponse);
                    observer.complete();
                })
            }

   });

 }

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

Вы можете использовать оператор switchMap с помощью rxjs.Вы можете сделать это так:

this.http.post(url, param, options).pipe(
  switchMap(data => {
    this.another(); //where data is the response from your http post request
  })
);
...