Angular 2 Http Async等待

时间:2017-01-25 16:29:08

标签: angular typescript async-await

我需要使用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'类型中不存在。

任何解决方案?

1 个答案:

答案 0 :(得分:6)

几乎从https://stackoverflow.com/a/41834083/1260204编辑的直接副本略有编辑,因此它侧重于toPromise而不是map

RxJs库有许多可以使用的运算符,例如toPromisemapcatchdo等,但为了使用这些必须引用它们包含的文件/模块。

角度网站上的教程很好地解释了您如何使用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';