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


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.


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';

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";

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.