繁体   English   中英

Angular 4:如何在订阅中使用等待/异步

[英]Angular 4 : How to use await/async within subscribe

老实说,angular 中的 await/async 确实是一个很棒的东西,它减少了很多大括号,提高了可读性并防止了很多人为错误。 然而,有一件事让我很困惑。 我如何在订阅中使用 await/async。

让我们说

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

}

TableCom 是一个提供程序,充当信号器组件和页面组件之间的通信器。

所以在页面组件构造函数中,它使用 observable 主题从信号器组件接收新数据,如下所示。

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 完成。 await 可以在这里实现吗? 提前谢谢你!!

您需要async关键字将函数标记为“async”:

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

SaveTableAsync() 的实现在哪里,因为这个方法需要返回一个等待的承诺。

由于 subscribe() 方法采用箭头函数,您可以简单地在定义前添加 async 关键字,即:

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

如果你的ReadTableAsync()方法返回一个 Observable,你首先需要使用toPromise()方法 从 observable返回一个 承诺,然后才能异步等待

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM