当前位置: 首页 > 知识库问答 >
问题:

fromPromise在Observable类型上不存在

岑元徽
2023-03-14

在使用rxjs的角度2中,我试图将promise转换为可观察的。正如许多在线指南所显示的,我在可观察的上使用了from mPromise。其中抛出错误:

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

Observable的导入方式如下:

import { Observable } from "rxjs/Observable";

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

import 'rxjs/add/operator/fromPromise';

即使我抑制了typescript错误,它仍然会导致错误:

(<any>Observable).fromPromise

错误:

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

rxjs回购协议中也报告了类似的问题,但也没有解决方案。

共有2个答案

缑赤岩
2023-03-14

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

你可以从这里找到参考资料

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

但是,如果您想指定Promise to Watch able,您可以使用如下所示的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);
        });
    });
}
章景同
2023-03-14

更新:

rxjs6.0起。0-β。3、操作员和可观察的创建者应从rxjs导入。此外,fromPromise不再是公共API的一部分,它被包装在from方法中。

TL;博士

更新

对于rxjs 6.0。0使用:

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

更新:

rxjs5.5. x中发布了管道操作符之后,强烈反对使用猴子补丁方法。考虑使用静态方法选项。

原来的答案

rxjs5.4起。x、 fromPromise可以用作静态方法,也可以修补到可观察的原型中。

对于第一种情况,您可以执行以下操作:

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

有关此方法的更多信息,请参见此处

就我个人而言,我会推荐第一种,考虑到第二种方法基本上是第一种,不同的是可观察的原型发生了变化。

 类似资料: