2017-07-20 21 views
6

Tôi thực sự có thể nói đang chờ/async trong góc thực sự là một công cụ tuyệt vời, nó làm giảm rất nhiều niềng răng, cải thiện khả năng đọc và ngăn chặn rất nhiều lỗi của con người. Tuy nhiên, có một điều khiến tôi nhớ rất nhiều. làm thế nào tôi có thể sử dụng await/async bên trong đăng ký.Góc 4: Làm thế nào để sử dụng await/async trong vòng đăng ký

giả

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

} 

TableCom là nhà cung cấp đóng vai trò như một người giao tiếp giữa một thành phần signalr và một thành phần trang.

vì vậy bên trong trình tạo thành phần trang, nó đang sử dụng đối tượng quan sát để nhận dữ liệu mới từ thành phần signalr như được hiển thị bên dưới.

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

vấn đề là điều này.ReadTableAsync() về cơ bản phải đợi điều này.SaveTableSync phải hoàn tất trước khi bắt đầu. chờ đợi có thể đạt được ở đây? cảm ơn bạn trước !!

+0

async/chờ đợi được sử dụng nơi những lời hứa được mong đợi, không 'SaveTableAsync' returnsa hứa chứ? và 'await' chỉ có thể được sử dụng bên trong' hàm async() {...} ' –

+0

có. SaveTableAsync kết thúc bộ nhớ ionic dựa trên lời hứa. –

Trả lời

6

Bạn cần từ khóa async để đánh dấu các chức năng như "async":

this.subscribe_table = this.com_table.Receive().subscribe(async res => { 
    await this.SaveTableAsync(res.data); 
    this.ReadTableAsync(); 
}); 
Các vấn đề liên quan