Observer
一个回调函数的集合,它知道如何去监听由Observable
提供的值。Observer
在信号流中是一个观察者(哨兵)的角色,它负责观察任务执行的状态并向流中发射信号。
这里我们简单实现一下内部的构造:
const observer = {
next: function(value) {
console.log(value);
},
error: function(error) {
console.log(error)
},
complete: function() {
console.log('complete')
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
在RxJS
中,Observer
是可选的。在next
、error
和 complete
处理逻辑部分缺失的情况下,Observable
仍然能正常运行,为包含的特定通知类型的处理逻辑会被自动忽略。
比如我们可以这样定义:
const observer = {
next: function(value) {
console.log(value);
},
error: function(error) {
console.log(error)
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
它依旧是可以正常的运行。
那么它又是怎么来配合我们在实际战斗中使用的呢:
const myObservable = Rx.Observable.create((observer) => {
observer.next('111')
setTimeout(() => {
observer.next('777')
}, 3000)
})
myObservable.subscribe((text) => console.log(text));
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
这里直接使用subscribe
方法让一个observer
订阅一个Observable
,我们可以看看这个subscribe
的函数定义来看看怎么实现订阅的:
subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
1
源码是用ts
写的,代码即文档,十分清晰,这里笔者给大家解读一下,我们从入参来看,从左至右依次是next
、error
,complete
,且是可选的,我们可以自己选择性的传入相关回调,从这里也就印证了我们上面所说next
、error
和 complete
处理逻辑部分缺失的情况下仍可以正常运行,因为他们都是可选的。
上次更新: 2023/11/25, 4:11:00