fromPromise在Observable类型上不存在


76

在使用rxjs的Angular 2中,我试图将Promise转换为Observable。由于许多在线指南的显示我用fromPromiseObservable。哪个抛出错误:

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

Observable的输入方式如下:

import { Observable } from "rxjs/Observable";

尝试fromPromise像其他运算符一样导入会导致错误:

import 'rxjs/add/operator/fromPromise';

即使我抑制打字稿错误,它仍然会导致错误:

(<any>Observable).fromPromise

错误:

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

此处在rxjs存储库中报告了类似的问题,但那里也没有解决方案。


1
请检查您正在使用的打字稿和rxjs的版本,Observable.fromPromise才应该起作用。在rxjs中检查文件fromPrommis.js->添加->可观察-> fromPromise.js
Jorawar Singh

rxjs 5.4.0打字稿2.3.4
艾哈迈德(Ahmad)

并且fromePromise.js确实存在
Ahmad

这就解释了。签出最新版本,它应包含该文件。如果您最新,则只需卸下节点模块并执行npm i。
乔拉瓦·辛格

Answers:


163

更新:

rxjs6.0.0-beta.3开始,应从中导入运算符和可观察的创建者rxjs。而且,fromPromise它不再是公共API的一部分,并且包装在from方法中。

TL; DR;

更新

对于rxjs 6.0.0,请使用:

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

更新:

5.5.x中释放可管道运算符rxjs,强烈不建议使用猴子补丁方法。考虑使用静态方法选项。

原始答案

rxjs5.4.x开始,fromPromise可以用作静态方法,也可以修补到Observable原型中。

首先,您可以执行以下操作:

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

var observableFromPromise = fromPromise(promiseSrc);

有关此方法的更多信息 点击此处

要执行第二步,您需要更改导入语句:

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

var observableFromPromise = Observable.fromPromise(promiseSrc);

有关此方法的更多信息 点击此处

考虑到第二种方法基本上是第一种方法,我个人建议第一种方法,不同之处Observable在于更改了原型。


4

就像乔塔所说的“来自”就是答案。

您可以从这里找到参考

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

但是,如果要指定“可观察的承诺”,则可以使用如下所示的“ fromPromise”。

  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);
        });
    });
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.