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