2017-06-22 6 views
1

Ich lief in diesem Problem und ich sehe nicht, wie man async Methode behandelt, weil ngOnChangesasync nicht unterstützt.Wie man async in ngOnChanges behandelt

Was machen Sie, um dies zu erreichen?

Es funktioniert nicht, wenn ich async an ngOnChanges anwende. Der Rückgabewert ist 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

können Sie die Antwort im Bereich Komponenten statt im Bereich ngOnChanges speichern? erwarte dies.queryArrray (query) .then (resp = = this.result = resp); – LLai

Antwort

1
  • Mark das Verfahren als async
  • await hinzufügen für das Ergebnis warten, der Promise
  • Entfernen Sie die then wie jetzt können Sie das Ergebnis direkt zuweisen, wenn Sie das hinzufügen await
  • Weisen Sie das Ergebnis direkt zu.

Code:

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

    result = await this.queryArray(query); 
} 

Beachten Sie auch, dass queryArray nicht als async markiert werden muss, wenn Sie auch das Ergebnis in diesem Verfahren zur Weiterverarbeitung warten wollen. Wenn es nur ein Versprechen erstellt und zurückgibt, ist es nicht notwendig.

+0

Wow! Das ist viel einfacher als ich dachte. Scheint, dass ich viel mehr Praxis auf Javascript-Versprechen benötige, wie ich von JQuery-Hintergrund kam. Danke, Mann! – fletchsod

Verwandte Themen