如何处理打字稿中异步函数的返回值?

时间:2017-07-31 10:30:07

标签: javascript typescript angular2-services

casesService函数处理HTTP req和response并返回单个对象。我想要返回该对象。但由于它是异步功能,因此返回空对象(this.caseBook)。我希望它只有在有值后才能返回对象。

public initData (selectedCaseId: number): CaseBook {   

       this.casesService
        .GetCaseById(selectedCaseId)
        .subscribe(data => {

            this.caseBook = data;

        });
       return this.caseBook; 
 }

1 个答案:

答案 0 :(得分:2)

对于打字稿Promise,你可以这样工作:

public async initData (selectedCaseId: number): CaseBook {       
    return await this.casesService.GetCaseById(selectedCaseId);
}

但由于您的this.casesService.GetCaseById是一个Observable,您可能无法直接从中返回纯值。返回一个Observable。

public initData (selectedCaseId: number): Observable<CaseBook> {   
   return this.casesService
    .GetCaseById(selectedCaseId);
}

然后你可以用async管道将其绑定到angular2:

{{this.initData() | async}}

为了获得更好的性能,建议为其绑定一个值,例如:

ngAfterViewInit() {
    this.initData().subscribe( data => this.caseBook = data );
}