fromPromise ist für den Typ Observable nicht vorhanden

76

In Angular 2 habe ich mit rxjs versucht, ein Versprechen in Observable umzuwandeln. Da viele Online - Führer zeigte verwendete ich fromPromiseauf Observable. Was Fehler wirft:

Property 'fromPromise' does not exist on type 'typeof Observable'.

Observable wurde wie folgt importiert:

import { Observable } from "rxjs/Observable";

Der Versuch, fromPromisewie andere Operatoren zu importieren , führt zu folgenden Fehlern:

import 'rxjs/add/operator/fromPromise';

Selbst wenn ich einen Typoskriptfehler unterdrücke, führt dies immer noch zu einem Fehler:

(<any>Observable).fromPromise

Error:

Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise is not a function

Ein ähnliches Problem wurde hier auf rxjs repo gemeldet , aber es gibt auch dort keine Lösung.

Ahmad
quelle
1
Bitte überprüfen Sie die Version von Typoskript und RXJs, die Sie verwenden. Observable.fromPromise sollte einfach funktionieren. Überprüfen Sie die Datei fromPrommis.js in rxjs -> hinzufügen -> beobachtbar -> fromPromise.js
Jorawar Singh
rxjs 5.4.0 Typoskript 2.3.4
Ahmad
und die fromePromise.js existiert
Ahmad
Das erklärt. Schauen Sie sich die neueste Version an und sie sollte diese Datei enthalten. Wenn Sie auf dem neuesten Stand sind, entfernen Sie einfach Ihre Knotenmodule und führen Sie npm i aus.
Jorawar Singh

Antworten:

162

AKTUALISIEREN:

Ab rxjs6.0.0-beta.3 sollten Operatoren und beobachtbare Ersteller aus importiert werden rxjs. Darüber hinaus fromPromiseist es nicht mehr Teil der öffentlichen API und wird in die fromMethode eingeschlossen.

TL; DR;

AKTUALISIEREN

Für rxjs 6.0.0 verwenden Sie:

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

AKTUALISIEREN:

Nach der Veröffentlichung der Pipeline-Operatoren in rxjs5.5.x wird vom Affen-Patch-Ansatz dringend abgeraten. Erwägen Sie die Verwendung der statischen Methodenoption.

Ursprüngliche Antwort

Ab rxjs5.4.x fromPromisekann als statische Methode verwendet oder in den ObservablePrototyp gepatcht werden .

Zum ersten können Sie Folgendes tun:

import { fromPromise } from 'rxjs/observable/fromPromise';

var observableFromPromise = fromPromise(promiseSrc);

Weitere Informationen zu diesem Ansatz finden Sie hier

Um das zweite zu tun, müssen Sie Ihre Importanweisung ändern:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';

var observableFromPromise = Observable.fromPromise(promiseSrc);

Weitere Informationen zu diesem Ansatz finden Sie hier

Persönlich würde ich den ersten empfehlen, wenn man bedenkt, dass der zweite Ansatz im Grunde der erste ist, mit dem Unterschied, dass der ObservablePrototyp geändert wird.

Jota.Toledo
quelle
4

wie das, was Jota 'von' sagte, ist die Antwort.

Die Referenz finden Sie hier

https://www.learnrxjs.io/operators/creation/from.html

Wenn Sie jedoch "Promise to Observable" angeben möchten, können Sie "fromPromise" wie unten verwenden.

  import { from as fromPromise, Observable} from 'rxjs';
  ...

  private getObservable(): Observable<any> {
    return fromPromise(this.promise);
  }


  private getPromise() {

   this.promise = new Promise((resolve, reject) => {
      this.service.getPromise()
        .then(response => {
          //  do sth
          resolve(response);
        });
    });
}
Energie
quelle