在使用rxjs的Angular 2中,我试图将Promise转换为Observable。由于许多在线指南显示我在fromPromise
上使用了Observable
。哪个引发错误:
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上报告了一些类似的问题,但也没有解决方案。
答案 0 :(得分:124)
<强>更新强>
从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语句:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
var observableFromPromise = Observable.fromPromise(promiseSrc);
有关此方法的更多信息here
我个人会推荐第一个,考虑到第二种方法基本上是第一种方法,区别在于Observable
原型已经改变。
答案 1 :(得分:1)
就像乔塔所说的“来自”就是答案。
您可以从此处找到参考
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);
});
});
}