web-dev-qa-db-ja.com

Angular 4:サブスクライブ内でawait / asyncを使用する方法

正直に言うと、angularのawait/asyncは本当に素晴らしいもので、多くのブレースを減らし、読みやすさを改善し、多くの人為的ミスを防ぎます。しかし、一つのことは私をとても困惑させます。サブスクライブ内でawait/asyncを使用するにはどうすればよいですか。

まあ言ってみれば

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

}

TableComは、シグナルコンポーネントとページコンポーネント間のコミュニケーターとして機能するプロバイダーです。

したがって、ページコンポーネントコンストラクター内では、以下に示すように、観察可能なサブジェクトを使用して、シグナルコンポーネントから新しいデータを受信して​​います。

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

問題は、this.ReadTableAsync()は基本的にthis.SaveTableAsyncが終了するのを待ってから開始する必要があることです。ここで待つことができますか?前もって感謝します !!

14
Steven Li

関数を「非同期」としてマークするには、asyncキーワードが必要です。

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