2017-06-22 144 views
1

我遇到了這個問題,我不知道如何處理async方法,因爲ngOnChanges不支持async如何處理ngOnChanges中的異步

你們爲此做了什麼?

當我申請asyncngOnChanges時,它不起作用。返回值是Promise

@Component({ 
    moduleId: module.id, 
    selector: 'search', 
    templateUrl: 'search.template.html' 
}) 
export class Search implments OnChanges { 
    async queryArray(data: string): Promise<T> { 
    //sample scripts. 
    return ....; 
    } 
    ngOnChanges(changes: SimpleChanges) { 
    let query: string = "red"; 
    let result: string[] = []; 

    await this.queryArray(query).then(resp => result = resp); 
    } 

}

+0

您可以將響應存儲在組件範圍內而不是ngOnChanges範圍內嗎?等待this.queryArrray(query).then(resp => this.result = resp); – LLai

回答

1
  • 標記方法async
  • 添加await等待的Promise
  • 結果取出then因爲現在你可以將結果直接分配,一旦你加入await
  • 直接指定結果。

代碼:

async ngOnChanges(changes: SimpleChanges) { 
    let query: string = "red"; 
    let result: string[] = []; 

    result = await this.queryArray(query); 
} 

還要注意的是queryArray不需要被標記爲async,除非你也想等待結果作進一步處理該方法。如果它正在做的是創建並返回一個Promise,那麼這是沒有必要的。

+0

哇!這比我想象的要簡單得多。似乎我需要在Javascript Promise上做更多的練習,因爲我從JQuery背景中脫穎而出。謝啦! – fletchsod