类型“ Observable <Response>”上不存在属性“ toPromise”


76
import { Headers, Http } from '@angular/http';

@Injectable()
export class PublisherService{

    private publishersUrl = 'app/publisher';

    constructor(private http: Http) { }

    getPublishers(): Promise<Publisher[]>{
        return this.http.get(this.publishersUrl)
                   .toPromise()
                   .then(response => response.json().data) 
                   .catch(this.handleError);
    }
}    

我收到此错误:

属性'toPromise'在'Observable'类型上不存在。


2
通常,将可观察变量转换为应许不是一个好主意。可观察的
事物

1
对于任何偶然发现此问题的人(这对我来说是Google的顶级链接),请参见以下链接的答案之一,网址github.com/Microsoft/TypeScript/issues/…正如上面所说,在Visual Studio 2015中,您可以通过microsoft.com/en-us/download/details.aspx?id=48593
Tony

Answers:


158

您需要像这样添加运算符:

import 'rxjs/add/operator/toPromise';

您要使用的每个rxjs运算符都需要此功能。


3
请更新您对第2版(最好是8或9)以上角度的答案
tatsu

10

尝试将“ Response”添加到来自“ @ angular / http”的导入语句中,如下所示:

import {Http, Headers, Response} from '@angular/http';

我也注意到,尽管您使用@Injectable装饰器,但您没有从角形芯导入Ingectable。

import { Injectable } from '@angular/core';

我还更新了systemjs.config.js并遵循了此页面上的建议。现在很好。
MiHawk '16

嗨,米哈克(MiHawk),您在systemjs.config.js中做了哪些更新?我也关注angular.io/docs/ts/latest/tutorial/toh-pt6.html,卡在这里
khoailang

因此,答案是什么,但没有说明解决此问题的方法
Jon B

1
我安装了最新版本的TypeScript工具版本2.X microsoft.com/en-us/download/details.aspx?id=48593,此问题得以解决-但又创建了209个。其余的修复程序是退出Visual Studio并运行> npm upgrade --save(以管理员身份)。几个软件包无法更新,但是当我启动Visual Studio Bower / npm时,它会自动更新其余的软件包,一切都很好。
Jon B

6

在开始时使用此导入

import {Observable} from "rxjs/Rx";

4
真是个坏主意,这会导入整个RXJS库,这确实很大,并且会大大增加页面加载时间。
danday74 '16

我不这么认为..我们使用来自“ @ angular / core”的import {component}; 好多地方吧,这样应该还不好吗?
imal hasaranga perera

4
从“ rxjs / Observable”导入{Observable};这就是您想要的...这将仅导入Observable,如果您执行rxjs / Rx,则它将导入所有RxJS并且仅使用Observable,这确实很慢。删除所有对rxjs / RX的引用,并观察网络请求的大量减少和页面加载速度的加快。
danday74 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.