首页 文章

fromPromise在Observable类型中不存在

提问于
浏览
46

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

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 repo here上报告了一些类似的问题,但也没有解决方案 .

2 回答

  • 1

    UPDATE:

    rxjs 6.0.0-beta.3开始,应从 rxjs 导入运算符和可观察的创建者 . 此外, fromPromise 不再是公共API的一部分,它包含在 from 方法中 .

    TL;DR;

    UPDATE

    对于rxjs 6.0.0使用:

    import { from } from 'rxjs';
    
    var observableFromPromise =  from(promiseSrc);
    

    UPDATE:

    rxjs 5.5.x中发布pipeable operators之后,强烈建议不要使用猴子补丁方法 . 考虑使用静态方法选项 .

    Original answer

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

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

    import { fromPromise } from 'rxjs/observable/fromPromise';
    
    var observableFromPromise = fromPromise(promiseSrc);
    

    有关此方法的更多信息here

    要做第二个,您需要更改import语句:

    import { Observable } from 'rxjs/Observable';
    import 'rxjs/add/observable/fromPromise';
    
    var observableFromPromise = Observable.fromPromise(promiseSrc);
    

    有关此方法的更多信息here

    我个人会推荐第一个,考虑到第二种方法基本上是第一种,区别在于 Observable 原型已经改变 .

  • 113

    就像Jota所说的“来自”是答案 .

    你可以从这里找到参考

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

    但是,如果你想指定'Promise to Observable',你可以使用'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);
            });
        });
    }
    

相关问题