Observable.of不是一个函数

时间:2016-04-12 09:00:41

标签: angular rxjs

我在项目中导入Observable.of函数时遇到问题。我的Intellij看到了一切。在我的代码中,我有:

import {Observable} from 'rxjs/Observable';

在我的代码中我使用它:

return Observable.of(res);

有什么想法吗?

19 个答案:

答案 0 :(得分:218)

其实我的进口搞砸了。在最新版本的RxJS中,我们可以像这样导入它:

import 'rxjs/add/observable/of';

答案 1 :(得分:119)

如果有人在使用Angular 6 / rxjs 6时遇到此问题,请在此处查看答案: Could not use Observable.of in RxJs 6 and Angular 6

简而言之,您需要像这样导入它:

import { of } from 'rxjs';

然后不用打电话

Observable.of(res);

只需使用

of(res);

答案 2 :(得分:41)

虽然这听起来很奇怪,但对我来说,重要的是在import {Observable} from 'rxjs/Observable的导入路径中大写'O'。如果我从observable_1.Observable.of is not a function导入Observable,则rxjs/observable的错误消息将保持不变。奇怪,但我希望它能帮助别人。

答案 3 :(得分:29)

我的愚蠢错误是当我要求观察时我忘记添加Array ( [tails] => 49960 [heads] => 50040 )

<强>当时:

/add

在视觉上看起来很好,因为import { Observable } from 'rxjs/Observable'; import 'rxjs/observable/of'; 文件实际上存在。

应该是:

rxjs/observable/of

答案 4 :(得分: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组件。

Comparison

答案 5 :(得分:18)

无论出于何种原因,补丁对我不起作用,所以我不得不采用这种方法:

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

// ...

return of(res)

答案 6 :(得分:16)

您也可以通过这种方式导入所有运营商:

import {Observable} from 'rxjs/Rx';

答案 7 :(得分:13)

如果您使用的是Angular 6/7

import { of } from 'rxjs';

然后不用打电话

Observable.of(res);

只需使用

of(res);

答案 8 :(得分:4)

这应该可以正常使用。

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

答案 9 :(得分:4)

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

.... 
return of(res)

答案 10 :(得分:4)

从Angular 5 / Rxjs 5升级到Angular 6 / Rxjs 6?

您必须更改导入和实例化。 Check out Damien's blog post

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

答案 11 :(得分:4)

我使用的是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

中移动/更改()功能

答案 12 :(得分:2)

RxJS 6

升级到RxJS库的第6版而不使用rxjs-compat包时,请使用以下代码

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

必须改为

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

答案 13 :(得分:2)

对于Angular 5+:

add_action ('add_meta_boxes','add_info_meta_box'); function add_info_meta_box() { add_meta_box('new_meta', 'info','info_meta_fields_output','product', 'side'); } function info_meta_fields_output($post) { $new_meta = get_post_meta($post->ID,'_new_meta',true); echo ('<label for="new_meta"> Custom Text </label>'); echo ('<input type="text" id="new_meta" name="new_meta" value="'.esc_attr($new_meta).'"/>'); } add_action('save_post','save_info_meta_box'); function save_info_meta_box($post_id) { $new_meta=sanitize_text_field($_POST['new_meta']); update_post_meta ($post_id,'_new_meta',$new_meta); } // Displaying the value on single product pages function meta_product($product_id) { $new_meta2 = get_post_meta(get_the_ID(),'_new_meta', true); echo ('<p id="value-on-single-product">' . $new_meta2 . '</p>'); } add_action('woocommerce_single_product_summary', 'meta_product',30); 应该有效。如果您使用

的观察者,观察者包应该与导入import { Observable } from 'rxjs/Observable';匹配

import { Observer } from 'rxjs/Observer';做了很多重要的事情,所以最好避免它。

答案 14 :(得分:2)

对于我(Angular 5和RxJS 5)而言,自动完成导入建议:

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

while to应该是(所有静态运算符fromof等都可以正常工作:

import { Observable } from 'rxjs/Observable';

答案 15 :(得分: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加载库的方式的这个小变化解决了我的问题。

答案 16 :(得分:1)

import 'rxjs/add/observable/of';

显示了rxjs-compat

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

我没有安装这个。由

安装
npm install rxjs-compat --save-dev

并重新运行解决了我的问题。

答案 17 :(得分:1)

public class user { [DefaultValue("")] public string Name { get; set; } //[DefaultValue( )] public DateTime PasswordLastSet { get; set; } } v6中,应将rxjs运算符导入为of

答案 18 :(得分:0)

不知怎的,即使是Webstorm就像这样import {of} from 'rxjs/observable/of'; 一切都开始起作用了