陌小路的个人博客 陌小路的个人博客
首页
  • 技术专区

    • 面试
    • Vue
    • Electron
    • TypeScript
    • Serverless
    • GraphQL
  • 我的秋招之旅
  • 2019年终总结
Todo
收藏夹
关于作者
GitHub

陌小路

前端切图仔
首页
  • 技术专区

    • 面试
    • Vue
    • Electron
    • TypeScript
    • Serverless
    • GraphQL
  • 我的秋招之旅
  • 2019年终总结
Todo
收藏夹
关于作者
GitHub
  • Vue

  • React

  • 面试

  • Electron

  • Serverless

  • GraphQL

  • TypeScript

  • RxJS

    • 介绍
    • 前置知识点
    • Observable
    • Observer
    • Subscription与Subject
    • Cold-Observables与Hot-Observables
    • Schedulers
    • Operators概念
    • 创建型Operators
    • 转换操作符
    • 过滤操作符
    • 组合操作符
    • 总结
  • 工程化

  • Webpack

  • Nestjs

  • WebRTC & P2P

  • Docker

  • Linux

  • Git

  • Svelte

  • 踩坑日记 & 小Tips

  • 其他

  • technology
  • RxJS
陌小路
2020-12-22

Observer

一个回调函数的集合,它知道如何去监听由Observable提供的值。Observer在信号流中是一个观察者(哨兵)的角色,它负责观察任务执行的状态并向流中发射信号。

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

在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

它依旧是可以正常的运行。

那么它又是怎么来配合我们在实际战斗中使用的呢:

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

这里直接使用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
Observable
Subscription与Subject

← Observable Subscription与Subject→

最近更新
01
github加速
01-01
02
在线小工具
01-01
03
Lora-Embeddings
11-27
更多文章>
Theme by Vdoing | Copyright © 2020-2024 STDSuperman | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式