Почему этот асинхронный вызов не работает правильно в Angular 6? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть следующий код (Angular 6), который работает при преобразовании обещаний в наблюдаемые и использовании распространения pipe и map / switchMap:

import { Observable, of, from as observableFrom } from 'rxjs';

public initialise(): Observable<boolean> {

  return observableFrom(SomeExternalSDK()).pipe(  // where SomeExternalSDK() is a promise
    map(response => {
      this.lib = response;
    }),
    switchMap(() => this.lib.CreateMyTable()),  // CreateMyTable() is a promise
    switchMap(() => this.lib.UpdateData()),  // UpdateData() is a promise
    map(() => {
      console.log('initialised!!');
      return true;
    }),
    catchError(error => {
       console.log('error: ' + error);
       return of (false);
    })        
  );

}

Но, пытаясь лучше понять async / await, я хотелчтобы преобразовать это в:

public initialise(): Observable<boolean> {

  const doInit = async () => {

     try {

       this.lib = await SomeExternalSDK();  // errors out on this line.
       await this.lib.CreateMyTable();
       await this.lib.UpdateData();

       console.log('initialised!!');
       return true;

     } catch (error) {
       console.log(error);
       return false;
     }

  };

  return observableFrom(doInit());
}

, но при запуске кода при вызове await SomeExternalSDK () кажется, что это вызывает ошибку, которая не перехватывается при попытке / ловить, и я неполучить что-нибудь полезное обратно в консоль.Есть ли что-то очевидное, что я делаю не так здесь?Я не привык ждать / асинхронно в машинописи, поэтому просто пытаюсь разобраться с этим.

...