Die Eigenschaft 'toPromise' ist für den Typ 'Observable <Response>' nicht vorhanden.

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

Ich erhalte diesen Fehler:

Die Eigenschaft 'toPromise' ist für den Typ 'Observable' nicht vorhanden

MiHawk
quelle
2
Normalerweise ist es keine gute Idee, Observable in Versprechen umzuwandeln. Observables sind viel mächtiger
Dinistro
1
Für alle anderen, die darüber stolpern (es war der Top-Google-Link für mich), siehe unten, der aus einer der verknüpften Antworten stammt. Github.com/Microsoft/TypeScript/issues/… Wie es heißt, können Sie dies in Visual Studio 2015 tun Beheben Sie dies, indem Sie Ihre Version von Typoskript über microsoft.com/en-us/download/details.aspx?id=48593
Tony

Antworten:

158

Sie müssen den Operator folgendermaßen hinzufügen:

import 'rxjs/add/operator/toPromise';

Dies wird für jeden rxjs-Operator benötigt, den Sie verwenden möchten.

Dinistro
quelle
1
Bitte aktualisieren Sie Ihre Antwort für Winkel über Version 2 (vorzugsweise 8 oder 9)
Tatsu
10

Versuchen Sie, Ihrer Importanweisung von '@ angle / http' wie folgt 'Antwort' hinzuzufügen:

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

Außerdem ist mir aufgefallen, dass Sie Ingectable nicht aus dem Winkelkern importieren, obwohl Sie @Injectable Decorator verwenden.

import { Injectable } from '@angular/core';
Shai Barak
quelle
Ich habe auch die Datei systemjs.config.js aktualisiert und bin den Vorschlägen auf dieser Seite gefolgt. Jetzt ist es gut.
MiHawk
Hallo MiHawk, was hast du in der systemjs.config.js aktualisiert?, ich folge auch der angle.io/docs/ts/latest/tutorial/toh-pt6.html , steckte hier fest
khoailang
Also, was war die Antwort, es ist nicht angegeben, was dieses Problem behebt
Jon B
1
Ich habe die neueste Version der TypeScript-Tools Version 2.X installiert. Microsoft.com/en-us/download/details.aspx?id=48593 und dies hat das Problem behoben - aber 209 andere erstellt. Der Rest des Fixes bestand darin, Visual Studio zu beenden und> npm upgrade --save (als Administrator) auszuführen. Einige Pakete konnten nicht aktualisiert werden, aber wenn ich Visual Studio Bower / npm starte, wird der Rest automatisch aktualisiert und alles ist gut.
Jon B
6

Verwenden Sie diesen Import am Anfang

import {Observable} from "rxjs/Rx";
imal hasaranga perera
quelle
4
Eine wirklich schlechte Idee, dies importiert die gesamte RXJS-Bibliothek, die wirklich groß ist und die Ladezeiten Ihrer Seiten massiv erhöht.
danday74
Ich glaube nicht. Wir verwenden den Import {component} from "@ angle / core". viele Orte richtig, also sollte das dann auch schlecht sein?
Imal Hasaranga Perera
4
{Observable} aus 'rxjs / Observable' importieren; ist das, was Sie wollen ... dies importiert nur Observable. Wenn Sie rxjs / Rx ausführen, importiert es alle RxJS und verwendet nur Observable, eine echte Verlangsamung. Entfernen Sie alle Verweise auf rxjs / RX und beobachten Sie die massive Reduzierung der Nettoanforderungen und die Beschleunigung der Seitenladegeschwindigkeit.
danday74