wake-up-neo.com

fromPromise ist beim Typ Observable nicht vorhanden

In Angular 2 mit rxjs habe ich versucht, ein Promise in Observable umzuwandeln. Wie viele Online-Handbücher gezeigt haben, habe ich fromPromise für Observable verwendet. Welcher Fehler wirft:

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

Observable wurde wie folgt importiert:

import { Observable } from "rxjs/Observable";

der Versuch, fromPromise wie andere Operatoren zu importieren, führt zu einem Fehler:

import 'rxjs/add/operator/fromPromise';

selbst wenn ich einen TypeScript-Fehler 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 zu rxjs repo here gemeldet, aber es gibt auch keine Lösung.

39
Ahmad

UPDATE:

Ab rxjs 6.0.0-beta.3 sollten Operatoren und beobachtbare Ersteller aus rxjs importiert werden. Außerdem ist fromPromise nicht mehr Teil der öffentlichen API und wird in die from-Methode eingeschlossen.

TL; DR;

UPDATE

Für rxjs 6.0.0 verwenden Sie:

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

UPDATE:

Nach der Veröffentlichung der pipeable-Operatoren in rxjs 5.5.x wird der Affen-Patch-Ansatz dringend empfohlen. Verwenden Sie die statische Methodenoption.

Originalantwort

Ab rxjs 5.4.x kann fromPromise als statische Methode verwendet oder in den Prototyp Observable gepatcht werden.

Zum ersten können Sie Folgendes tun:

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

var observableFromPromise = fromPromise(promiseSrc);

Mehr Infos zu diesem Ansatz 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);

Mehr Infos zu diesem Ansatz hier

Persönlich würde ich die erste empfehlen, da der zweite Ansatz im Prinzip der erste ist, mit dem Unterschied, dass der Prototyp Observable geändert wird.

108
Jota.Toledo

so wie 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 folgt 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);
        });
    });
}
1
Energy