Как ждать метода возврата, пока ответ службы не завершится в Angular? - PullRequest
0 голосов
/ 27 февраля 2019

Я звоню в службу API и присваиваю ответ API любому типу [].

Проблема в том, что метод завершился без ожидания ответа API?

Ниже приведен мой код

Component.ts

  this.catalogService.getCatalogsData().subscribe((data => {
     this._catalogData=data;
      console.log("catalogService function execution done!");
   })); 

service.ts

public responseData:any=[];

 constructor(private http: HttpClient) { 
      }
    public getCatalogsData(){

      debugger;

           this.http.get(this.APIUrl}}).toPromise().then(  
                data => {  
                      this.responseData = data as string [];  
                      console.log("API Response completed");
                  }  
              ); 

       return this.responseData;
      }

Logs Output: -
catalogService function execution done!
API Response completed

Expected OutPut:-
API Response completed
catalogService function execution done!

1 Ответ

0 голосов
/ 27 февраля 2019

В вашем коде есть две проблемы.

1- Ваш метод возвращает массив, и вы подписаны на него (хотя есть проблема с асинхронностью)

2- Метод возвращает массив взакончите, и это произойдет до того, как ваш результат обещания станет готовым

Решение 1:

public getCatalogsData(): Promise<any>{

       return this.http.get(this.APIUrl).toPromise();
}

this.catalogService.getCatalogsData().then((data => {
     this._catalogData=data;
      console.log("catalogService function execution done!");
})); 

Решение 2

public getCatalogsData(): Observable<any>{
          return this.http.get(this.APIUrl);
}

this.catalogService.getCatalogsData().subscribe((data => {
     this._catalogData=data;
      console.log("catalogService function execution done!");
})); 

Примечание

В обоих решениях выpublic responseData:any=[]; не нуждается в вашем обслуживании

...