2017-07-20 10 views
6

Mogę szczerze powiedzieć, że oczekiwanie/asynchronizacja w kanciastości jest naprawdę świetną rzeczą, redukuje wiele nawiasów klamrowych, poprawia czytelność i zapobiega wielu błędom ludzkim. Jednak jedna rzecz mnie zastanawia. jak mogę korzystać z oczekiwania/asynchronizacji wewnątrz subskrybowania.Angular 4: Jak używać oczekujących/asynchronicznych w subskrypcji

powiedzmy

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

} 

TableCom jest dostawcą służy jako komunikator pomiędzy składnikiem signalr i części strony.

Tak więc wewnątrz konstruktora komponentu strony używa obserwowalnego obiektu do otrzymywania nowych danych z komponentu signalr, jak pokazano poniżej.

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(); 
     }); 
    } 

kwestia jest taka, że ​​this.ReadTableAsync() w zasadzie musi czekać this.SaveTableAsync być zakończone przed rozpoczęciem. Czekać tutaj można osiągnąć? z góry dziękuję !!

+0

asynchroniczny/Oczekujcie służy gdzie spodziewane są obietnice, czy 'SaveTableAsync' returnsa obietnicy? i 'await' może być użyte tylko wewnątrz' async function() {...} ' –

+0

yes. SaveTableAsync podsumowuje pamięć jonową, która jest oparta na obietnicy. –

Odpowiedz

6

Musisz słowa kluczowego async zaznaczyć funkcję jako "async":

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