Rxjs学习,结合angular(搁置,后续还会添加)

 

1.Rxjs介绍

是一种库,针对于异步数据流的一种编程工具,也叫响应式编程

2.基本概念

首先说明,这些基本概念单词,跟代码上重复的单词关系不大,只是rxjs中的一些基本概念

Observable(可观察对象): 字如其名表示可观察对象,类似于一个事件中心, 比如下面的例子,给一个dom元素绑定了一input事件,进行一个对input事件的监听.

// 从rxjs中引入observable
import { Observable, Subscription } from 'rxjs'; 
// 创建一个可观察对象,input$,并对其绑定一个input事件
// node指的是一个dom节点
const input$ = Observable.fromEvent(node, 'input');

Observe(观察者): 表示一个回调函数的集合,上面已经对事件进行监听,并且返回了一个可观察对象Observable,那么观察者就是一个用来接收观察结果的函数,通过subcribe订阅了可观察对象input$, 观察者中包含了三种不同的回调函数,分别表示成功 失败 完成,

当事件被触发的时候 如果observe能成功捕获新的值就会调用next 捕获失败会调用 error, complete则是取消订阅的一种方式.如果不取消的话这种订阅会一直存在.

理解: Observable需要结合 observe一块使用才有效果 ,

流程是 产生可观察对象, 将观察者 去订阅 可观察对象

input$.subscribe({
  next: (event: any) => console.log(`You just typed ${event.target.value}!`),
  error: (err) => console.log(`Oops... ${err}`),
  complete: () => console.log(`Complete!`)
});

Subscription(订阅): 表示Observable的执行 主要用于取消Observable的执行,也就说是取消订阅的另一种方式

const sub = input$.subscribe({
  next: (event: any) => console.log(`You just typed ${event.target.value}!`),
  error: (err) => console.log(`Oops... ${err}`),
  complete: () => console.log(`Complete!`)
});
sub.unsubscribe() // 取消订阅

Operaors(操作符): 采用函数式编程风格的纯函数 使用像map filter这样的操作符来处理集合,主要是对可观察对象进行链式编程,这个应该很好理解

Subject(主体): 相当于EventEmitter, (可以去看看angualr中的子传父的方式),这个比较适合用越传值,observable需要结合着observer才能实现订阅-发布的效果,但是这个subject可以自攻自受地实现效果看下面的案例

@Injectable()
export class MessageService {
 private subject = new Subject<any>(); //1. 产生主题对象
 send(message: any) {
   this.subject.next(message); // 1.1 通过主体对象 设置发送数据的方式 sub.next()
}
 get(): Observable<any> {
   return this.subject.asObservable();// 1.2 通过主体对象 设置接收数据的方式 sub.asObservable
}
}
+++++++++++++++++++++++++++++++++++++
constructor(public srv: MessageService) { }
ngOnInit() {
 this.srv.send('w s k f m?')  // 2. 调用方法 发送数据
}
++++++++++++++++++++++++++++++++++++++++
constructor(private srv: MessageService) {}
message: any;
ngOnInit() { // 注意点: 一定要进行订阅才可以接收到 这个数据
 this.srv.get().subscribe((result) => {  // 3.调用方法 接收数据
   this.message = result;
})
}

Schedulers(调度器): 这个??? 我暂时还不是很明白 先这样吧 后续再进行添加

 

原文地址:https://www.cnblogs.com/shicongcong0910/p/14586043.html