Observable.ofは関数ではありません


189

Observable.ofプロジェクトのインポート機能に問題があります。私のIntellijはすべてを見ています。私のコードでは:

import {Observable} from 'rxjs/Observable';

そして私のコードではそれをそのように使用します:

return Observable.of(res);

何か案は?


5
正しいインポートと使用でimport { of } from 'rxjs'; return of(res); rxjs6を使用している場合は、最新のドキュメントを確認してください。github.com / ReactiveX
fidev 2018年

回答:


232

実際、私は台無しにした輸入品を持っています。RxJSの最新バージョンでは、次のようにインポートできます。

import 'rxjs/add/observable/of';

21
私の192ダブルテイクの後、私は私のコードで私はからインポートされたことに気づいたoperator/- rxjs/add/operator/of代わりに- observable/。ドー。
EricRobertBrewer 16

角張ったプロジェクトの1つでこのステートメントを使用する必要がないことを発見しました。しかし、もう1つはインポートする必要があります。違いがわかりません。その理由を知っていますか?
niaomingjian 2017

1
角度バージョン、たぶん?!4.3.2ではこれを行う必要はありませんでしたが、5.0.0では行いました。
Draghon 2017

@Draghon:私とまったく同じです。4.4ではそれを行う必要がありませんでしたが、今では5.2で行います。さらに奇妙なことに、私はそれを1つのファイルに含めるだけでよく、他のすべての.tsファイルは単にそれを取得するだけでよいのです。
JP ten Berge、

2
「rxjs / add / observable / of」モジュールが見つからない場合はどうなりますか?
エンリコ

167

Angular 6 / rxjs 6の使用中に誰かがこの問題を抱えている場合は、ここで回答を参照してください: RxJs 6とAngular 6でObservable.ofを使用できませんでした

つまり、次のようにインポートする必要があります。

import { of } from 'rxjs';

そして呼び出す代わりに

Observable.of(res);

ただ使う

of(res);

2
ありがとうございました!Rxでインポートを計算することは、APIの揮発性のために、私にとって常に非常に大きなフラストレーションの原因です。
DomenicDatti

43

奇妙に聞こえるかもしれませんが、私にとってはのインポートパスで「O」を大文字にすることが重要でしたimport {Observable} from 'rxjs/Observableobservable_1.Observable.of is not a functionからオブザーバブルをインポートすると、エラーメッセージが表示されたままになりますrxjs/observable。奇妙ですが、それが他の人の役に立つことを願っています。


39

Angular 6/7を使用している場合

import { of } from 'rxjs';

そして呼び出す代わりに

Observable.of(res);

ただ使う

of(res);

これは、RxJSバージョンが5から6に変更され、多くの重大な変更が導入されたためです。Angularプロジェクトの移行方法については、rxjs.dev
Edric

29

私のばかげた間違いは、私が/addオブザーバブルを必要とするときに追加するのを忘れたということでした。

だった:

import { Observable } from 'rxjs/Observable';
import 'rxjs/observable/of';

rxjs/observable/of実際には、ファイルが存在するため、見た目は問題ありません。

する必要があります:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';

@Shaun_gradyが指摘したように、どういうわけかこれは機能しません。私は彼の提案に
賛成


18

追加するだけで、

それらの多くを使用している場合は、すべてを使用してインポートできます

import 'rxjs/Rx'; 

@Thierry Templierが述べたように。しかし、私はあなたが制限された演算子を使用しているなら、あなたは次のような個々の演算子をインポートするべきだと思います

import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/of';

@ukszで言及されています。

「rxjs / Rx」は、確実にパフォーマンスを犠牲にするすべてのRxコンポーネントをインポートするためです。

比較


1
角張ったプロジェクトの1つでこのステートメントを使用する必要がないことを発見しました。しかし、もう1つはインポートする必要があります。違いがわかりません。その理由を知っていますか?
niaomingjian 2017

16

この方法ですべての演算子をインポートすることもできます。

import {Observable} from 'rxjs/Rx';

7
これは非常に大きなライブラリであり、「の」は非常に小さいため、この方法でインポートすることはお勧めしません。
methgaard 2017年

2
@methgaard import { Observable } from 'rxjs/Observable' import 'rxjs/add/observable/of';が機能しません。のみimport {Observable} from 'rxjs/Rx';機能します。バージョンは5.4.2
niaomingjian

@methgaardごめんなさい。私が間違えました。事実はわかったObservable_1.Observable.of(...).delay(...).timeout is not a functionです。私は使用しませんでしたimport 'rxjs/add/operator/timeout'
niaomingjian 2017

バンドルサイズも大きくなります
Amirhossein Mehrvarzi '23 / 09/23

5

Angular 5.2とRxJS 5.5.6を使用しています

このコードは機能しませんでした

     import { Observable,of } from 'rxjs/Observable';

     getHeroes(): Observable<Hero[]> {
        return of(Hero[]) HEROES;

      }

以下のコードは機能しました:

    import { Observable } from 'rxjs/Observable';
    import { Subscriber } from 'rxjs/Subscriber';

     getHeroes(): Observable<Hero[]> 
     {
          return Observable.create((observer: Subscriber<any>) => {
              observer.next(HEROES);
              observer.complete();
          });

      }

呼び出し方法:

this.heroService.getHeroes()
      .subscribe(heroes => this.heroes = heroes);

RxJS 5.5.2で機能が移動/変更された可能性があると思います


4

これは正しく動作するはずです。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';

4
// "rxjs": "^5.5.10"
import { of } from 'rxjs/observable/of';

.... 
return of(res)

これはコードのみの回答です。あなたが提案しようとしていることを説明していただけますか?
Peter Wippermann

1
こんにちは、パフォーマンスの問題のため、「監視可能」全体ではなく、必要な演算子のみをインポートする必要があります。新しいバージョン(^ 5.5.10)では、 "of"演算子をインポートする正しい方法は次のとおりです。解像度を編集します。ピーターに感謝します。
letanthang 2018

4

Angular 5 / Rxjs 5からAngular 6 / Rxjs 6にアップグレードしましたか?

インポートとインスタンス化を変更する必要があります。Damienのブログ投稿をご覧ください。

Tl; dr:

import { Observable, fromEvent, of } from 'rxjs';

const yourResult = Observable
    .create(of(yourObservable))
    .startWith(null)
    .map(x => x.someStringProperty.toLowerCase());

//subscribe to keyup event on input element
Observable
    .create(fromEvent(yourInputElement, 'keyup'))
    .debounceTime(5000)
    .distinctUntilChanged()
    .subscribe((event) => {
        yourEventHandler(event);
    });

1
6.0を使用して、Observable.create(of(val))にサブスクライブしようとすると、「this._subscribeは関数ではありません」という結果になりました。代わりに、「of(val)」を呼び出すだけでオブザーバブルを正常に作成しました。
ジムノーマン

3

RxJS 6

RxJSライブラリのバージョン6にアップグレードし、rxjs-compatパッケージを使用しない場合は、次のコード

import 'rxjs/add/observable/of';   
  // ...
  return Observable.of(res);

に変更する必要があります

import { of } from 'rxjs';
  // ...
  return of(res);

2

今日私はこの問題を抱えていました。systemjsを使用して依存関係をロードしています。

私はこのようにRxjsをロードしていました:

...
    paths: {
        "rxjs/*": "node_modules/rxjs/bundles/Rx.umd.min.js"
    },
...

パスを使用する代わりに、これを使用します。

var map = {
...
'rxjs':                       'node_modules/rxjs',
...
}

var packages = {
...
'rxjs': { main: 'bundles/Rx.umd.min.js', defaultExtension: 'js' }
...
}

systemjsがライブラリをロードする方法のこの小さな変更は、私の問題を修正しました。


この質問はAngular 2 当てはまります。RxJSUMDモジュールではうまく機能しません
Estus Flask

2

Angular 5+の場合:

import { Observable } from 'rxjs/Observable';うまくいくはずです。import { Observer } from 'rxjs/Observer';オブザーバーを使用している場合、オブザーバーパッケージもインポートと一致する必要があります。

import {<something>} from 'rxjs'; 巨大なインポートを行うので、それを避ける方が良いです。


2

私(Angular 5およびRxJS 5)の場合、オートコンプリートのインポートが推奨されています。

import { Observable } from '../../../../../node_modules/rxjs/Observable';

すべての静的オペレーターと(する必要がありながらfromof、電気ショック療法作業罰金:

import { Observable } from 'rxjs/Observable';

1
import 'rxjs/add/observable/of';

rxjs-compatの要件を示しています

require("rxjs-compat/add/observable/of");

これはインストールしていません。によってインストール

npm install rxjs-compat --save-dev

そして、再実行して私の問題を修正しました。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.