感觉of
操作符在快速创建Observable的时候挺方便的,使用from
在进行一些转化的,对这两个操作符进行整理一下。
操作符of
1 | public static of(values: ...T, scheduler: Scheduler): Observable<T> |
可以使用concat
和其他Observable组合,例如:
1 | const ofListObs = of(1, 2, 3); |
依次先发出1、2、3、a、b、c,然后一秒发出一个数字。
操作符 from
1 | public static from(ish: ObservableInput<T>, scheduler: Scheduler): Observable<T> |
从一个数组、类数组对象、promise、迭代器对象或者类Observable对象创建一个Observable。
几乎可以把任何东西都能转化为Observable。
将数组转化为Observable
从一般数组转化:
1 | from([1, 2, 3]).subscribe(res => { |
将Observable转化为Observable:
1 | from([of(1, 2, 3), of('a', 'b', 'c')]).pipe( |
将字符串转化为Observable
1 | from('test').subscribe(res => { |
将一个无限迭代器转化为Observable
创建一个无限迭代器:
1 | static * generateDoubles(seed) { |
通过from
转化迭代器为Observable(只取迭代器的前十个):
1 | const iterator = OfFromComponent.generateDoubles(3); |
从promise转化
1 | from(new Promise(resolve => resolve('hello'))).subscribe(res => { |
从集合中转化
1 | const m = new Map(); |
扩展:fromPromise、fromEvent、fromEventPattern
除了通用的from
操作符,还有fromPromise
专门处理Promise转换Observable,以及fromEvent
专门处理事件转换Observable。
fromPromise
1 | public static fromPromise(promise: PromiseLike<T>, scheduler: Scheduler): Observable<T> |
将promise转化为Observable.
返回一个仅仅发出Promise resolve过的值然后完成的Observable。
如果Promise resolve一个值,输出Observable发出这个值然后完成。如果Promise被rejected,输出Observable后发生相应的错误。
1 | fromPromise(fetch('http://www.mxnzp.com/api/weather/current/%E6%B7%B1%E5%9C%B3')).subscribe( |
fetch方法比较特殊,返回一个Promise,然后json()
后继续Promise.then()
才可以拿到接口的返回值。
fromEvent
1 | public static fromEvent(target: EventTargetLike, eventName: string, options: EventListenerOptions, selector: SelectorMethodSignature<T>): Observable<T> |
创建一个Observable,该Observable发出来自给定事件对象的指定类型事件。
创建一个来自于DOM事件,或者Node的EventEmitter事件或其他事件的Observable。
通过给“事件目标”添加时间监听器的方式创建Observable,可能会是拥有addEventListener
和removeEventListener
方法的对象,一个Node.js的EventEmitter,一个jQuery式的EventEmitter,一个Dom的节点集合,或者Dom的HTMLCollection。Observable被订阅的时候事件处理函数会被添加,当取消订阅的时候会将事件处理函数移除。
名称 | 类型 | 属性 | 描述 |
---|---|---|---|
target | EventTargetLike | 必须 | 事件目标,事件处理的对象 |
eventName | string | 必填 | 事件名称,从target发出 |
options | EventListenerOptions | 可选 | 传递给addEventListener的参数 |
selector | SelectorMethodSignature |
可选 | 函数处理的结果 |
1 | fromEvent(document, 'click').subscribe(x => { |
对上面的程序进行扩展,点击页面上的任何地方,出现一个小东西,0.5s后消失:
1 | constructor( |
fromEventPattern
一个从基于addHandler/removeHandler方法的api创建Observable。目前感觉没什么用,先占个坑,后面用到了再细化。
整理了of
操作符和from
操作符的用法,以及相关的fromEvent
和fromPromise
操作符。