簡體   English   中英

Observable.of不是一個函數

[英]Observable.of is not a function

我在我的項目中導入Observable.of函數時遇到問題。 我的Intellij看到了一切。 在我的代碼中,我有:

import {Observable} from 'rxjs/Observable';

在我的代碼中我使用它:

return Observable.of(res);

有任何想法嗎?

其實我的進口搞砸了。 在最新版本的RxJS中,我們可以像這樣導入它:

import 'rxjs/add/observable/of';

如果在使用Angular 6 / rxjs 6時有任何人遇到此問題,請參閱此處的答案: 無法在RxJs 6和Angular 6中使用Observable.of

簡而言之,您需要像這樣導入它:

import { of } from 'rxjs';

而不是打電話

Observable.of(res);

只是用

of(res);

雖然聽起來很奇怪,但對於我來說,重要的是import {Observable} from 'rxjs/Observable的導入路徑中的'O'。 如果我從rxjs/observable導入Observable,則observable_1.Observable.of is not a function的錯誤消息observable_1.Observable.of is not a function保持存在。 奇怪,但我希望它能幫助別人。

我的愚蠢錯誤是我在需要觀察時忘了添加/add

是:

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

其實在視覺上看起來很好,因為rxjs/observable/of file,實際上存在。

應該:

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

如果您使用的是Angular 6/7

import { of } from 'rxjs';

而不是打電話

Observable.of(res);

只是用

of(res);

只是添加,

如果您使用其中許多,那么您可以導入所有使用

import 'rxjs/Rx'; 

正如@Thierry Templier所說。 但我認為如果您使用的是有限運營商,那么您應該導入個別運營商

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

如@uksz所述。

因為'rxjs / Rx'將導入絕對性價比的所有Rx組件。

對照

無論出於何種原因,補丁對我不起作用,所以我不得不求助於這種方法:

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

// ...

return of(res)

您也可以通過這種方式導入所有運算符:

import {Observable} from 'rxjs/Rx';

這應該正常工作只是嘗試它。

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

.... 
return of(res)

從Angular 5 / Rxjs 5升級到Angular 6 / Rxjs 6?

您必須更改導入和實例化。 查看Damien的博客文章

TL;博士:

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);
    });

我使用的是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中移動/更改了()功能

我今天遇到了這個問題。 我正在使用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 5+:

import { Observable } from 'rxjs/Observable'; 應該管用。 觀察者包應該與導入匹配,以及import { Observer } from 'rxjs/Observer'; 如果你正在使用觀察者

import {<something>} from 'rxjs'; 做了很大的進口,所以最好避免它。

RxJS 6

升級到RxJS庫的版本6並且不使用rxjs-compat包時,請使用以下代碼

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

必須改變成

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

對我來說(Angular 5&RxJS 5),自動完成導入建議:

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

應該是(所有靜態運算符, fromof ,工作正常:

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

顯示了rxjs-compat的要求

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

我沒有安裝這個。 安裝者

npm install rxjs-compat --save-dev

並重新運行修復我的問題。

rxjs V6, of操作者應該導入為import { of } from 'rxjs';

不知何故,甚至Webstorm都像import {of} from 'rxjs/observable/of';那樣import {of} from 'rxjs/observable/of'; 一切都開始奏效了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM