来自数组的 Observable 在 TypeScript 中不起作用

Posted

技术标签:

【中文标题】来自数组的 Observable 在 TypeScript 中不起作用【英文标题】:Observable from an array doesn't work in TypeScript 【发布时间】:2016-12-15 04:52:55 【问题描述】:

我正在尝试从数组中创建一个 observable,正如 https://github.com/ReactiveX/rxjs/blob/master/doc/observable.md 中的文档所述:

import Observable from 'rxjs/Observable';
let theList = Observable.from(sites);

但我明白了:

TypeError: Observable_1.Observable.from is not a function

我的目标是在 Observable 序列上使用像 reducescan 这样的运算符,因为标准的 Observable 似乎不支持,如下所示:

this.theList = new Observable(observer => 
  // this works
  observer.next(sites);
);

this.sub = this.theList.reduce(function() 
  // this is never called
  return acc;
).subscribe(l => 
  // this is never called
  this.finalList = l;
);

代码可以在这个 Plnkr 中找到:http://plnkr.co/edit/cKEqtp (src/app.ts)。

谢谢!

【问题讨论】:

【参考方案1】:

您正在导入最小的Observable

import  Observable  from 'rxjs/Observable';

所以要使用from,你也需要这个导入:

import 'rxjs/add/observable/from';

【讨论】:

【参考方案2】:

有多种解决方案:

1 - 导入特定元素

在您的示例中,您只是导入了Observable,但是,您使用.from() 方法从数组中创建一个可观察对象。所以如果你想使用它,你必须导入.from() 方法。 reduce 运算符也是如此。

import  Observable  from 'rxjs/Observable';
import 'rxjs/add/observable/from';
import 'rxjs/add/operator/reduce';

2 - 导入所有运算符和方法

Observable 是从rxjs/Rx 引入的,因此以这种方式拉取它会自动为您获取所有运算符和方法。

import  Observable  from 'rxjs/Rx';

有什么区别?

这两种方法的最大区别在于,您不会使用第一种方法一次导入所有运算符。当您在生产模式下工作时,它会很有用。

【讨论】:

以上是关于来自数组的 Observable 在 TypeScript 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤 Observable 数组?

如何在使用 observable 更新数组时更新 *ngFor 以及如何在网站加载时初始化 observable?

IOS RxSwift 从 Observable 数组创建 Observable 数组

从数据数组中创建observable并将所有这些链接在一起

Rxjs Observable 数组在给定的开始和结束值之间进行选择

如何通过 Observable 属性对项目数组进行排序?