我需要使用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'在'Observable'类型中不存在。
任何解决方案?
答案 0 :(得分:6)
几乎从https://stackoverflow.com/a/41834083/1260204编辑的直接副本略有编辑,因此它侧重于toPromise
而不是map
。
RxJs
库有许多可以使用的运算符,例如toPromise
,map
,catch
,do
等,但为了使用这些必须引用它们包含的文件/模块。
角度网站上的教程很好地解释了您如何使用Observable<T>
以及如何创建引用映射到您想要使用的更常用的方法,如toPromise
RxJs
lib。通过创建一个单独的文件,引用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';