Búsqueda de sitios web

typescript - Angular 4: Cómo usar await/async dentro de subscribe


Puedo decir honestamente que await/async en Angular es realmente algo grandioso, reduce muchos corchetes, mejora la legibilidad y previene muchos errores humanos. Sin embargo, hay algo que me desconcierta mucho: cómo puedo usar await/async dentro de subscribe.

digamos

 @Injectable()
export class TableCom extends BaseCom {
  public subject = new Subject<any>();

}

TableCom es un proveedor que sirve como comunicador entre un componente SignalR y un componente de página.

entonces dentro del constructor del componente de la página, está usando el sujeto observable para recibir nuevos datos del componente signalr como se muestra a continuación.

constructor(protected nav: NavController,
        protected db: Storage,
        protected alert: AlertController,
        protected order: OrderData,
        protected translate: TranslateService,
        public navParams: NavParams,
        public toastCtrl: ToastController,
        private table_data: TableData,
        private load: LoadingController,
        private http: Http,
        private com_table: TableCom

    )
    {
        super(nav, db, alert, order, translate, undefined, false);
        this.previous_page = navParams.get('previous_page');
        this.subscribe_table = this.com_table.Receive().subscribe(res =>
        {
            await this.SaveTableAsync(res.data);
            this.ReadTableAsync();
        });
    }

El problema es que this.ReadTableAsync() básicamente tiene que esperar a que this.SaveTableAsync termine antes de empezar. ¿Se puede usar await aquí? ¡Gracias de antemano!

Respuesta #1

Necesitas la palabra clave async para marcar la función como "async":

this.subscribe_table = this.com_table.Receive().subscribe(async res => {
    await this.SaveTableAsync(res.data);
    this.ReadTableAsync();
});

Artículos relacionados