1. ホーム
  2. angular

[解決済み] fromPromiseはObservable型に存在しない。

2023-03-21 14:25:07

質問

Angular 2でrxjsを使用して、PromiseをObservableに変換しようとしていました。多くのオンラインガイドが示したように、私は fromPromiseObservable . これはエラーを投げます。

Property 'fromPromise' does not exist on type 'typeof Observable'.

のようにObservableがインポートされました。

import { Observable } from "rxjs/Observable";

インポートしようとする fromPromise をインポートしようとすると、他の演算子と同様にエラーになります。

import 'rxjs/add/operator/fromPromise';

typescript errorを抑制してもエラーになります。

(<any>Observable).fromPromise

エラーです。

Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise is not a function

似たような問題がrxjsのレポで報告されています。 ここで で報告されていますが、そこにも解決策はありません。

どのように解決するのですか?

UPDATEしてください。

現在 rxjs 6.0.0-beta.3 では、オペレータと観測可能なクリエータは rxjs . さらに fromPromise はもう公開 API の一部ではなく、そのラップは from メソッドにラップされています。

TL;DRです。

アップデイト

rxjs 6.0.0はこちらをご利用ください。

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

UPDATEです。

のリリース後 パイプ式演算子 rxjs 5.5.xでは、モンキーパッチ的なアプローチは強く推奨されません。静的メソッドオプションを使用することを検討してください。

オリジナルの回答

現在のところ 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);

この手法の詳細 ここで

個人的には、2番目のアプローチは基本的に1番目のアプローチであることを考慮すると、1番目のアプローチをお勧めしますが、違いは Observable プロトタイプが変更されている点が異なります。