fromPromise 在 Observable 类型上不存在 [英] fromPromise does not exist on type Observable
问题描述
在使用 rxjs 的 Angular 2 中,我试图将 Promise 转换为 Observable.正如许多在线指南所示,我在 Observable
上使用了 fromPromise
.哪个抛出错误:
属性 'fromPromise' 不存在于类型 'typeof Observable' 上.
Observable 是这样导入的:
import { Observable } from "rxjs/Observable";
尝试像其他运算符一样导入 fromPromise
会导致错误:
import 'rxjs/add/operator/fromPromise';
即使我抑制打字稿错误,它仍然会导致错误:
(Observable).fromPromise
错误:
Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise 不是函数
在 rxjs 存储库这里上报告了一些类似的问题,但那里也没有解决方案.
更新:
从 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,强烈不鼓励使用猴子补丁方法.考虑使用静态方法选项.
原答案
从 rxjs
5.4.x 开始,fromPromise
可以用作静态方法,也可以修补到 Observable
原型中.>
首先,您可以执行以下操作:
import { fromPromise } from 'rxjs/observable/fromPromise';var observableFromPromise = fromPromise(promiseSrc);
有关此方法的更多信息此处
要做第二个,你需要改变你的导入语句:
import { Observable } from 'rxjs/Observable';导入 'rxjs/add/observable/fromPromise';var observableFromPromise = Observable.fromPromise(promiseSrc);
有关此方法的更多信息此处一个>
我个人推荐第一种,考虑到第二种方法基本上是第一种,区别在于改变了Observable
原型.
In Angular 2 using rxjs I was trying to convert a Promise to Observable. As many of online guides showed I used fromPromise
on Observable
. Which throws error:
Property 'fromPromise' does not exist on type 'typeof Observable'.
Observable was imported like:
import { Observable } from "rxjs/Observable";
trying to import fromPromise
like other operators results in error:
import 'rxjs/add/operator/fromPromise';
even if I suppress typescript error it still results in error:
(<any>Observable).fromPromise
Error:
Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise is not a function
Somewhat similar issue was reported on rxjs repo here but there is no solution there either.
UPDATE:
As of rxjs
6.0.0-beta.3, operators and observable creators should be imported from rxjs
. Furthermore, fromPromise
is not part of the public API anymore and its wrapped in the from
method.
TL;DR;
UPDATE
For rxjs 6.0.0 use:
import { from } from 'rxjs';
var observableFromPromise = from(promiseSrc);
UPDATE:
After the release of the pipeable operators in rxjs
5.5.x, the monkey patch approach is strongly discouraged. Consider to use the static method option.
Original answer
As of rxjs
5.4.x, fromPromise
can be used as a static method or can be patched into the Observable
prototype.
For the first, you can do the following:
import { fromPromise } from 'rxjs/observable/fromPromise';
var observableFromPromise = fromPromise(promiseSrc);
More info about this approach here
To do the second, you need to change your import statement:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
var observableFromPromise = Observable.fromPromise(promiseSrc);
More info about this approach here
Personally I would recommend the first one, considering that the 2nd approach is basically the 1rst, with the difference that the Observable
prototype is changed.
这篇关于fromPromise 在 Observable 类型上不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!