可观察类型上不存在 fromPromise
Posted
技术标签:
【中文标题】可观察类型上不存在 fromPromise【英文标题】:fromPromise does not exist on type Observable 【发布时间】:2018-01-28 19:16:55 【问题描述】:在使用 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';
即使我抑制 typescript 错误,它仍然会导致错误:
(<any>Observable).fromPromise
错误:
Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise is not a function
在 rxjs repo here 上报告了一些类似的问题,但那里也没有解决方案。
【问题讨论】:
请检查您正在使用的 typescript 和 rxjs 的版本,Observable.fromPromise 应该可以工作。在 rxjs -> add -> observable -> fromPromise.js 中检查文件 fromPrommis.js rxjs 5.4.0 打字稿 2.3.4 而且 fromePromise.js 确实存在 这就解释了。查看最新版本,它应该包含该文件。如果你是最新的,那么只需删除你的节点模块并执行 npm i。 【参考方案1】:更新:
从rxjs
6.0.0-beta.3 开始,应从rxjs
导入运算符和可观察创建者。此外,fromPromise
不再是公共 API 的一部分,而是包含在 from
方法中。
TL;DR;
更新
对于 rxjs 6.0.0 使用:
import from from 'rxjs';
var observableFromPromise = from(promiseSrc);
更新:
在rxjs
5.5.x 中发布pipeable operators 后,强烈建议不要使用猴子补丁方法。考虑使用静态方法选项。
原答案
从rxjs
5.4.x 开始,fromPromise
可以用作静态方法,也可以修补到Observable
原型中。
首先,您可以执行以下操作:
import fromPromise from 'rxjs/observable/fromPromise';
var observableFromPromise = fromPromise(promiseSrc);
有关此方法的更多信息here
要执行第二个,您需要更改导入语句:
import Observable from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
var observableFromPromise = Observable.fromPromise(promiseSrc);
有关此方法的更多信息here
我个人推荐第一种,考虑到第二种方法基本上是第一种,不同的是Observable
原型被改变了。
【讨论】:
【参考方案2】:就像 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);
);
);
【讨论】:
以上是关于可观察类型上不存在 fromPromise的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2:“Observable<Response>”类型上不存在属性“toPromise”
我试图取消订阅一个可观察的角度但我收到错误,例如取消订阅不存在