从数组创建Observable

21

我目前在使用Angular2和Observable对象时遇到了问题。

我有一个组件调用服务:一个与api链接的真实服务和一个虚假的服务。

与API相关的服务工作正常,但当我使用虚假服务时,我想从Observable对象返回一个数组,但是我遇到了这个错误:“Observable_1.Observable.fromArray不是一个函数”

以下是我的代码:

组件:

this._raceService.list().subscribe(newRaces => { 

  this.races = newRaces;
}); 

真正的服务:

list(){ return this._http.get('http://dev.backend.com/api.php', options).map(res => res.json()); }

虚假服务:

list() { return Observable.fromArray([{ name: 'London' }]); }

请问你能帮我吗?

谢谢。

7个回答

29

那应该是...

Rx.Observable.from(yourarray)

fromArray 似乎已被弃用。


1
谢谢,但是当我使用Observable.from时,在编译时会出现以下错误: error TS2346:提供的参数与调用目标的任何签名都不匹配。当Rx没有导出成员时,如何使用Rx.Observable? - intuix
这是与列表方法签名有关的 TypeScript 错误吗?你需要加上 list(): any {...} 吗? - ade jones
不理解 list() 的作用?List 也不是 Observable 属性之一。我需要一个 Observable 对象中的方法,该方法以数组为参数,并且最终必须可“订阅”,因为我的组件会对结果进行订阅。 - intuix
我有一个类似的问题,但在我的情况下没有错误,但当我对其进行.map(..)时,它不会触发下游事件。 - Sonic Soul
在我看来,这是更合适的答案。 - Piyush Katariya

17

需要更新 RxJS 6 的答案,现在是:

import {from} from 'rxjs';

const observable = from([ { a: 1, b: 2 } ]);

使用rxjs 6版本。谢谢。 - Hardik
完美。非常感谢! - samivic

14

Observable.fromArray()在 RxJS 5 版本中已被移除,请使用 from()

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/from';
...
Observable.from([1, 2, 3, 4]);

4

我曾遇到相同的问题,需要在我的组件中添加以下导入语句:

import 'rxjs/add/observable/fromArray';

我通过在我所引用的Rx.js文件中搜索fromArray来找到需要添加的导入语句(要注意,你的项目中可能有不同版本的该文件):

System.register("rxjs/add/observable/fromArray", ["rxjs/Observable", "rxjs/observable/ArrayObservable"], true, function(require, exports, module) {
  // ...
});

4

我遇到了同样的问题,在我的代码中进行了一些研究...

我导入了:

import {Observable} from "rxjs/Observable";

改为:

import {Observable} from "rxjs/Rx";

希望这能帮助其他人。


谢谢您的回答。在我的情况下,这个表单很好用: import { Observable } from "rxjs"; - luke-at-work

4

我遇到了相同的问题。我认为你可能会得到这个错误是因为 fromArray 已经被弃用。

为了防止导入不需要的rxjs部分,请导入 rxjs/Observable。

import { Observable } from 'rxjs/Observable';

fromArray已被弃用。请使用

list() { return Observable.from([{ name: 'London' }]); }

通常最好在您的帖子中添加一个解释,讲述代码的工作原理。这样可以让新开发人员了解代码的功能。 - Caleb Kleveter
1
@CalebKleveter - 感谢您指出这一点。我对答案进行了评论,但它们对读者来说并不明显,因为它们是在代码块内的代码注释中。我已更新答案以提取注释。 - swoodruff
import 'rxjs/add/observable/from'; - Zoidy

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接