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';
typeScriptエラーを抑制してもエラーが発生します:
(<any>Observable).fromPromise
エラー:
Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise is not a function
Rxjsリポジトリで多少似た問題が報告されました here しかし、解決策もありません。
UPDATE:
rxjs
6.0.0-beta.3の時点で、演算子と観察可能な作成者はrxjs
からインポートする必要があります。さらに、fromPromise
はパブリックAPIの一部ではなくなり、from
メソッドにラップされました。
TL; DR;
UPDATE
Rxjs 6.0.0の場合:
import { from } from 'rxjs';
var observableFromPromise = from(promiseSrc);
UPDATE:
rxjs
5.5.xの pipeable operator のリリース後、モンキーパッチアプローチは強く推奨されません。静的メソッドオプションの使用を検討してください。
元の答え
rxjs
5.4.xの時点で、fromPromise
は静的メソッドとして使用するか、Observable
プロトタイプにパッチを適用できます。
最初は、次のことができます。
import { fromPromise } from 'rxjs/observable/fromPromise';
var observableFromPromise = fromPromise(promiseSrc);
このアプローチに関する詳細情報 こちら
2番目を行うには、importステートメントを変更する必要があります。
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
var observableFromPromise = Observable.fromPromise(promiseSrc);
このアプローチに関する詳細情報 こちら
個人的には、Observable
プロトタイプが変更されているという違いはありますが、2番目のアプローチは基本的には1番目であるため、最初のアプローチをお勧めします。
ジョタが「から」と言ったことが答えです。
ここから参照を見つけることができます
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);
});
});
}