来自数组的 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 序列上使用像 reduce
或 scan
这样的运算符,因为标准的 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 更新数组时更新 *ngFor 以及如何在网站加载时初始化 observable?
IOS RxSwift 从 Observable 数组创建 Observable 数组