# learn-rxjs
**Repository Path**: onlylucky/learn-rxjs
## Basic Information
- **Project Name**: learn-rxjs
- **Description**: 学习rxjs一个demo
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-04-13
- **Last Updated**: 2023-04-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
learn-rxjs
对rxjs异步编程处理及部分实践
鸽了那么久,总算想起来还有rxjs文档需要整理,嘿嘿嘿🕊️🕊️🕊️
## 目录
- [目录](#目录)
- [背景](#背景)
- [1. 回调地狱](#1-回调地狱)
- [2.promise 缺点](#2promise-缺点)
- [简介](#简介)
- [1. 典型写法](#1-典型写法)
- [2. 简单创建器](#2-简单创建器)
- [提交规范](#提交规范)
---
## 背景
**其实 Rxjs 用来处理异步请求处理的**,就这么简单。javascript 是一种函数式编程,也是过程式的语言,我们日常的开发分为同步和异步处理的环境中,过程式和函数式在处理同步中,过程式编程更胜一筹。在异步处理 ajax 请求中,按部就班的过程处理显得不是很合理。函数式编程可以依据本身回调特性去处理,由此而诞生下面的大魔王。
### 1. 回调地狱
如果我们使用的异步请求多达好多个,由此下去就会发现是一个像楼梯的代码,维护起来成本很大,你或许可能想起一个叫 Promise 的中介,拯救这个无尽循环地狱。
promise 原意是承诺许诺的意思,我们将所需要完成的事情交给 promise 这个老板,在处理完之后,他会告诉我们成功或失败了,我们在成功的时候进行一系列的操作,失败后进行错误处理。
promise 更多使用细节就不在进行重复了,因为这些只是前菜。
### 2.promise 缺点
对于那个楼梯一样的代码,promise 已经有了很大的进步,但是在其他的异步场景中还是远远不够看的。比如下面的场景
> 如果你发起了一个 Ajax 请求,然后用户导航到了另一个路由,显然,你这个请求如果还没有完成就应该被取消,而不应该发出去。但是使用 Promise,你做不到。不是因为实现方面的原因,而是因为它在概念层(接口定义上)就无法支持取消。
很显然,promise 这个中介只会关注我给你结果,你给他所需要处理过程,像驴子一样倔强,只要开始,直至返回结果
这时我们就需要一个更高级的 Promise。
下面列举一些异步处理演变过程,也算是前置知识
- Observable(观察模式)
- FRP(响应式编程)
- ReactiveX(FRP 库)
下面就是 Rxjs 的出场了
## 简介
> RxJS 就是 ReactiveX 在 JavaScript 语言上的实现
RxJS 是 Reactive Extensions for JavaScript 的缩写,起源于 Reactive Extensions,是一个基于可观测数据流 Stream 结合观察者模式和迭代器模式的一种异步编程的应用库。RxJS 是 Reactive Extensions 在 JavaScript 上的实现。
### 1. 典型写法
```js
of(1,2,3).pipe(
filter(item=>item % 2 === 1),
map(item=>item \* 3),
).subscribe(item=> console.log(item))
```
其中 of 称为创建器(creator),用来创建流,它返回一个 Observable 类型的对象,filter 和 map 称为操作符(operator),用来对条目进行处理。这些操作符被当作 Observable 对象的 pipe 方法的参数传进去。诚然,这个写法略显怪异,不过这主要是被 js 的设计缺陷所迫,它已经是目前 js 体系下多种解决方案中相对好看的一种了。
Observable 对象的 subscribe 方法表示消费者要订阅这个流,当流中出现数据时,传给 subscribe 方法的回调函数就会被调用,并且把这个数据传进去。这个回调函数可能被调用很多次,取决于这个流中有多少条数据。
### 2. 简单创建器
## 提交规范
- `feat` 增加新功能
- `fix` 修复问题/BUG
- `style` 代码风格相关无影响运行结果的
- `perf` 优化/性能提升
- `refactor` 重构
- `revert` 撤销修改
- `test` 测试相关
- `docs` 文档/注释
- `build` 对构建系统或者外部依赖项进行了修改
- `chore` 依赖更新/脚手架配置修改等
- `workflow` 工作流改进
- `ci` 持续集成
- `types` 类型定义文件更改
- `wip` 开发中