zoukankan      html  css  js  c++  java
  • rxjs和它的操作符

    之前一直在写LINQ之类的东西,对于函数式的面向对象还是有一些功底,所以对于rxjs,感觉上不是很难,但是每次看完过几天就忘,还是记一下笔记吧,好记性不如烂笔头真不是盖的。

    首先介绍几个重要的概念。

    可以通过这个URL来详细了解相关知识:https://www.jianshu.com/p/f2f87925b229

    rxjs中有几个重要的概念,有Observable、Observer、Subject,他们参考了观察者模式(或者叫发布/订阅模式)和迭代器模式。rxjs中有一个数据流的概念,和LINQ很类似,可以想象有一根管道,数据缓缓从管道中流过。发送数据的角色是生产者,消费数据的角色是观察者,观察者要想消费数据的话得知道生产者什么时候发送数据,也就是说,观察者要从生产者订阅一下通知,以便及时消费数据,这个过程就是由Observable来完成的。

    Observable

    Observevable是一个对象,如果要创建一个Observable,可以从如下两个例子来看:

     const observable$ = new Observable<number>(observer => {
          observer.next(1);
          observer.next(2);
          observer.next(3);
          observer.next(4);
          return {
            unsubscribe: () => {
              console.log('complete');
            }
          };
        });
        const subscription = observable$.subscribe(value => console.log(value));

    如上,生产者就是next(1)啊,next(2)啊中的1和2,Observable<number>则表示这个生产者是一个要发送number类型的生产者,给构造函数传入的function是一个接受一个observer的函数,这个observer对象拥有三个方法分别是next、error和complete。其中next方法用来消费生产者发送出来的数据,error用来捕获错误,complete用来通知完成。没错,这个observer就是一个观察者,观察者用来消费生产者发布的数据。

    Observable内部可以想象成这样的一种结构:

    class observable<T> {
      _subscribe: (observer: Observer<T>) => Unsubscribable;
      constructor(subscriber: (observer: Observer<T>) => Unsubscribable) {
        this._subscribe = subscriber;
      }
      subscribe(observer: Observer<T>): Unsubscribable {
        this._subscribe(observer);
        return { unsubscribe: () => console.log('complete') };
      }
    }

    上面的代码简单的诠释了一个Observable的内部结构,Observer<T>是一个观察者,它拥有next、complete和error三个方法。

    除了上面这些,Observable还有冷和热的的区别,这个以后补充,现在着急介绍下一个功能。

    Subject

    subject是Observable和Observer的结合,从Observable来看,subject本身是继承了Observable,从Observer来看,subject是observer的鸭子类型(兼容)。Subject的内部是这样的:

    class subject<T> {
      _observers: Observer<T>[];
      subscribe(observer: Observer<T>): void {
        this._observers.push(observer);
      }
      next(value) {
        this._observers.forEach(item => item.next(value));
      }
      complete() {
        this._observers.forEach(item => item.complete());
      }
      error(value) {
        this._observers.forEach(err => err.error(value));
      }
    }

    不同于Observable的是Subject是多播的(组播),它可以通过一个生产者调动多个观察者。

    基础的只知识就介绍到这里,下面介绍操作符。

  • 相关阅读:
    [国嵌攻略][047][MMU功能解析]
    [国嵌攻略][045-046][一跃进入C大门]
    [国嵌攻略][044][初始化Bss段]
    [国嵌攻略][043][栈初始化]
    [国嵌攻略][042][代码搬移不可少]
    [国嵌攻略][041][6410和210内存初始化]
    [国嵌攻略][040][2440内存初始化]
    页面中加入回到顶部按钮的实现方法(转)
    【总结整理】js获取css的属性(内部,外部,内嵌(写在tag中))
    【总结整理】前端‘变量名’‘类名’‘函数名’的命名规则
  • 原文地址:https://www.cnblogs.com/pangjianxin/p/9952979.html
Copyright © 2011-2022 走看看