Javascript 如何处理typescript中异步函数的返回值?

Javascript 如何处理typescript中异步函数的返回值?,javascript,typescript,angular2-services,Javascript,Typescript,Angular2 Services,casesService函数处理HTTP req和响应,并返回单个对象。我想把东西还回去。但由于它是一个异步功能,所以它返回空对象(this.caseBook)。我希望它仅在对象具有值之后才返回该对象 public initData (selectedCaseId: number): CaseBook { this.casesService .GetCaseById(selectedCaseId) .subscribe(data =>

casesService函数处理HTTP req和响应,并返回单个对象。我想把东西还回去。但由于它是一个异步功能,所以它返回空对象(this.caseBook)。我希望它仅在对象具有值之后才返回该对象

public initData (selectedCaseId: number): CaseBook {   

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

            this.caseBook = data;

        });
       return this.caseBook; 
 }

对于typescript Promise,您可以通过以下方式使其工作:

public async initData(selectedCaseId:number):CaseBook{
返回等待this.casesService.GetCaseById(selectedCaseId);
}
但是由于您的
this.casesService.GetCaseById
是可观察的,因此您可能无法直接从中返回纯值。返回一个可观察的

public initData(selectedCaseId:number):可观察{
退回这个。CaseService
.GetCaseById(selectedCaseId);
}
然后可以使用
async
pipe为angular2绑定它:

{{this.initData()| async}
为了获得更好的性能,建议为其绑定一个值,例如:

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

对于typescript Promise,您可以通过以下方式使其工作:

public async initData(selectedCaseId:number):CaseBook{
返回等待this.casesService.GetCaseById(selectedCaseId);
}
但是由于您的
this.casesService.GetCaseById
是可观察的,因此您可能无法直接从中返回纯值。返回一个可观察的

public initData(selectedCaseId:number):可观察{
退回这个。CaseService
.GetCaseById(selectedCaseId);
}
然后可以使用
async
pipe为angular2绑定它:

{{this.initData()| async}
为了获得更好的性能,建议为其绑定一个值,例如:

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

我收到一个错误,指出:Type'typeof CaseBook'在ES5/ES3中不是有效的异步函数返回类型,因为它没有引用承诺兼容的构造函数值。我收到一个错误,指出:Type'typeof CaseBook'在ES5/ES3中不是有效的异步函数返回类型,因为它没有引用承诺兼容的构造函数值。但是回调不起作用!不能直接从异步方法返回数据。使用承诺或回扣。你说它不工作是什么意思?回调没有正确返回值!!!但是回调不起作用!不能直接从异步方法返回数据。使用承诺或回扣。你说它不工作是什么意思?回调没有正确返回值!!!