ChatGPT解决这个技术问题 Extra ChatGPT

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

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);
    }
}    

我收到此错误:

类型“Observable”上不存在属性“toPromise”。任何

通常,将 observables 转换为 Promise 并不是一个好主意。 Observables 更强大
对于其他偶然发现此问题的人(它是我的顶级谷歌链接),请参阅下面的链接答案之一github.com/Microsoft/TypeScript/issues/…正如它所说,在 Visual Studio 2015 中,您可以通过更新您的打字稿版本来解决此问题通过microsoft.com/en-us/download/details.aspx?id=48593

D
Dinistro

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

import 'rxjs/add/operator/toPromise';

这对于您要使用的每个 rxjs 运算符都是必需的。


请更新您对 Angular 以上版本 2(最好是 8 或 9)的回答
S
Shai Barak

尝试从“@angular/http”向您的导入语句添加“响应”,如下所示:

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

我还注意到,尽管您使用 @Injectable 装饰器,但您并没有从角核心导入 Ingectable。

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

我还更新了 systemjs.config.js 并遵循了此页面上的建议。现在好了。
嗨 MiHawk,您在 systemjs.config.js 中做了什么更新?,我也在关注 angular.io/docs/ts/latest/tutorial/toh-pt6.html,卡在这里
那么答案是什么,没有说明解决这个问题的方法
我安装了最新版本的 TypeScript 工具版本 2.X microsoft.com/en-us/download/details.aspx?id=48593,这解决了问题——但又创建了 209 个其他版本。修复的其余部分是退出 Visual Studio 并运行 >npm upgrade --save(以管理员身份)。有几个包无法更新,但是当我启动 Visual Studio Bower/npm 时,会自动更新其余的包,一切都很好。
L
Liam

在开始时使用此导入

import {Observable} from "rxjs/Rx";

真是个坏主意,这会导入整个 RXJS 库,这个库非常大,会大大增加你的页面加载时间。
我不这么认为.. 我们使用 import { component } from "@angular/core";很多地方对所以这应该也不好呢?
从 'rxjs/Observable' 导入 {Observable};是你想要的......这将只导入 Observable,如果你执行 rxjs/Rx 那么它将导入所有 RxJS 并且只使用 Observable,这真的很慢。删除所有对 rxjs/RX 的引用,观察网络请求的大量减少和页面加载速度的加快。