我需要使用async
/await
呼叫http.get
我试过https://labs.encoded.io/2016/12/08/asyncawait-with-angular/
但是
async getPrice(currency: string): Promise<number> {
const response = await this.http.get(this.currentPriceUrl).toPromise();
return response.json().bpi[currency].rate;
}
toPromise()
给我一个错误:
[ts]属性“topromise”不存在于类型“observate”上。
有什么解决办法吗?
最佳答案
几乎是对https://stackoverflow.com/a/41834083/1260204的直接拷贝,稍加编辑,因此它关注的是toPromise
而不是map
。RxJs
库有许多可以使用的运算符,如toPromise
、map
、catch
、do
等,但要使用这些运算符,必须引用其中包含的文件/模块。
Angular站点上的教程对如何使用Observable<T>
以及如何创建到要使用的更常见方法的引用映射(如toPromise
库中的RxJs
)有很好的解释。通过创建一个引用RxJs
库中更常用的运算符和类型的文件,您只需在需要使用这些类型的地方引用该引用文件,这样就省去了在项目中重新添加所有运算符/类型的麻烦想利用他们。
下面是一个示例文件(在本例中命名为rxjs-operators.ts
),其中包含一些更常用的方法。
// Observable class extensions
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
// Observable operators
import 'rxjs/add/operator/toPromise'; // <=== your missing extension
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
在要使用
.toPromise
(或任何其他方法)的文件顶部添加此行。import './rxjs-operators';
关于angular - Angular 2 Http异步等待,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41856709/