Ожидание подписки для завершения установки публичной переменной - PullRequest
0 голосов
/ 02 сентября 2018

На моем компоненте я получаю переводы из моего сервиса.
Служба выполняет вызов контроллера MVC API.

код на компоненте:

  private getTranslations(): void {
    this._translationService.getTranslations('Foo');
  }

Код на сервисе:

  public translations: Translation[] = new Array<Translation>();

  public getTranslations(action: string) {
    this._http.get<Translation[]>(this.baseUrl + action).subscribe(
      (result: Translation[]) => {    
         result.forEach(element => {
            this.translations.push(element);
         });
      },
      (error: any) => this._loggerService.logError(error)
    );
  }

В службе он устанавливает значение для переменной this.translations в подписке.
Как я могу ждать в моем компоненте, чтобы это "завершилось", означая, что публичная переменная this.translations установлена?

Я видел поток, чтобы обернуть его в new Promise(), но я не смог понять это в моем примере. Можно использовать любой метод.

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете вернуть observable из вашего сервиса:

 public translations: Translation[] = new Array<Translation>();

 public getTranslations(action: string) {
    return new Observable((observer) => { // <-- return an observable
      this._http.get<Translation[]>(this.baseUrl + action).subscribe(
        (result: Translation[]) => {    
           result.forEach(element => {
              this.translations.push(element);
           });

           observer.complete(); // <-- indicate success
        },
        (error: any) => {
          this._loggerService.logError(error);
          observer.error(error); // <-- indicate error
        }
      );
    });
  }

и подпишитесь на компонент:

  private getTranslations(): void {
    this._translationService.getTranslations('Foo').subscribe({
      error: () => { /* handle error */ },
      complete: () => { /* handle complete */ },
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...