正直に言うと、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が終了するのを待ってから開始する必要があることです。ここで待つことができますか?前もって感謝します !!
関数を「非同期」としてマークするには、async
キーワードが必要です。
this.subscribe_table = this.com_table.Receive().subscribe(async res => {
await this.SaveTableAsync(res.data);
this.ReadTableAsync();
});