2016-06-29 29 views
64
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' 上键入 '可观测<Response>' 不存在

Property 'toPromise' does not exist on type 'Observable'.any

+2

通常通过更新您的打字稿的版本解决这个问题,它不是观测转换成承诺一个好主意。 Observable is more more powerful – Dinistro

回答

152

您需要添加操作是这样的:

import 'rxjs/add/operator/toPromise'; 

这是您想要使用的每个rxjs操作员都需要的。

10

尝试增加从“回应”到你的导入声明“@角/ HTTP” 这样的:

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

而且我注意到虽然你使用@Injectable装饰你不从角核心 导入Ingectable 。

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

我也更新了systemjs.config.js并按照此页面上的建议。现在很好。 – MiHawk

+0

嗨MiHawk,你在systemjs.config.js中更新了什么?,我也在跟着https://angular.io/docs/ts/latest/tutorial/toh-pt6.html,在这里卡住了 – khoailang

+0

那么什么是答案,它没有说明什么修复了这个问题 –

7

使用此导入之初

import {Observable} from "rxjs/Rx";

+2

真的很糟糕的想法,这导入了整个RXJS库,这是非常大的,并将大量增加您的页面加载时间。 – danday74

+0

我不这么认为..我们使用来自“@ angular/core”的import {component};很多地方对,所以这应该也是坏的呢? –

+3

从'rxjs/Observable'导入{Observable};是你想要的...这将只导入Observable,如果你使用rxjs/Rx,那么它将导入所有的RxJS并且只使用Observable,这是一个真正的减速。删除所有对rxjs/RX的引用,并观察网络请求的大量减少和页面加载速度的加快。 – danday74

-2

对于我来说,在这里标注没有工作,我被封了正确的答案。 所以,我经历了另一个link,这表明它可能是Visual Studio的一个问题。我尝试了他们在答案中提出的选项,但那也没有奏效。

因此,我继续安装Visual Studio代码。事情开始为我工作得很好,我被畅通无阻。发布此信息的人被阻止(就像我一样)。

我知道这不是一个解决方案,但只是一个解决方法,以帮助解除阻止人。

希望这会有所帮助。

相关问题