Observable

Observable

观察者模式推送数据 + 迭代器修改数据

Observer Pattern 观察者模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Producer {
constructor() {
this.listeners = []
}

addListener(listener) {
if (typeof listener === 'function') {
this.listeners.publish(listener)
} else {
throw new Error('listener must be a function')
}
}

removeListener(listener) {
this.listeners.splice(this.listeners.indexOf(listener))
}

notify(message) {
this.listeners.forEach(listener => {
listener(message)
})
}
}

Iterator Pattern 迭代器

延迟运算
序列,可以使用map,filter等方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 原生
const arr = [1,2,3];
const iterator = arr[Symbol.iterator]();
iterator.next();
// { value: 1, done: false }
iterator.next();
// { value: 1, done: false }
iterator.next();
// { value: 1, done: false }
iterator.next();
// { value: undefined, done: true }

// 手写迭代器
class IteratorFromArray {
constructor(arr) {
this._array = arr;
this._cursor = 0;
}

next() {
return this._cursor < this._array.length ?
{ value: this._array[this._cursor++], done: false } :
{ done: true }
}
}

本文作者: 孟 虎
本文链接: https://menghu1994.github.io/blog/2023/10/RxJS/Observable/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!