Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

angular - fromPromise does not exist on type 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...