83 votes

fromPromise n'existe pas sur le type Observable

Dans Angular 2 en utilisant rxjs j'essayais de convertir une Promise en Observable. Comme le montrent de nombreux guides en ligne, j'ai utilisé fromPromise en Observable . Ce qui provoque une erreur :

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

Observable a été importé comme :

import { Observable } from "rxjs/Observable";

J'essaie d'importer fromPromise comme les autres opérateurs entraîne une erreur :

import 'rxjs/add/operator/fromPromise';

même si je supprime l'erreur de typographie, il y a toujours une erreur :

(<any>Observable).fromPromise

Erreur :

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

Un problème similaire a été signalé sur le dépôt rxjs. aquí mais il n'y a pas de solution là non plus.

1 votes

Vérifiez la version de typescript et de rxjs que vous utilisez, Observable.fromPromise devrait fonctionner. vérifiez le fichier fromPrommis.js dans rxjs -> add -> observable -> fromPromise.js

0 votes

Rxjs 5.4.0 typescript 2.3.4

0 votes

Et le fromePromise.js existe bien.

183voto

Jota.Toledo Points 11554

UPDATE :

A partir de rxjs 6.0.0-beta.3, les opérateurs et les créateurs d'observables doivent être importés de l'application rxjs . En outre, fromPromise ne fait plus partie de l'API publique et est enveloppée dans l'interface de l'utilisateur. from méthode.

TL;DR ;

UPDATE

Pour rxjs 6.0.0, utilisez :

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

UPDATE :

Après la sortie de la opérateurs de tuyauterie en rxjs 5.5.x, l'approche "monkey patch" est fortement déconseillée. Pensez à utiliser l'option de méthode statique.

Réponse originale

A partir de rxjs 5.4.x, fromPromise peut être utilisée comme une méthode statique ou peut être intégrée dans la méthode Observable prototype.

Pour le premier, vous pouvez faire ce qui suit :

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

var observableFromPromise = fromPromise(promiseSrc);

Plus d'informations sur cette approche aquí

Pour faire le second, vous devez modifier votre déclaration d'importation :

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

var observableFromPromise = Observable.fromPromise(promiseSrc);

Plus d'informations sur cette approche aquí

Personnellement, je recommanderais la première, étant donné que la deuxième approche est fondamentalement la première, avec la différence que le Observable Le prototype est modifié.

4voto

Energy Points 62

Comme l'a dit Jota, la réponse est "de".

vous pouvez trouver la référence ici

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

Cependant, si vous voulez spécifier "Promise to Observable" (Promesse vers Observable) vous pouvez utiliser 'fromPromise' comme ci-dessous.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X