美文网首页
RxJS异步数据流

RxJS异步数据流

作者: OOM_Killer | 来源:发表于2019-05-12 19:19 被阅读0次

RxJS 是 ReactiveX 编程理念的JavaScript 版本。他是针对异步数据流的编程,简单的说就是将一切数据,包括HTTP请求,DOM事件或者普通数据等包装成流的形式,然后用强大丰富的操作符对流进行处理,使你能够以同步编程的方式处理异步数据,并组合不同的操作符来轻松实现你所需要的功能。
RxJS是一种针对异步数据流工具,Angular引入RxJS就是为了让异步可控、更简单。

常见的异步编程的几种方法

1.回调函数
2.事件监听/发布订阅
3.Promise
4.RxJS

同步和异步的不同

首先这里定义了两个方法,一个是同步,一个是异步。

  getData(): string {
    return '这个是同步方法返回';
  }

  getCallBackData() {
    setTimeout(() => {
      return '这个是回调异步方法返回';
    }, 1000);
  }

如果直接调用的话,第二个getCallBackData() 是打印出了一个undefined,如下图的调用方式

    // 同步调用
    const syncData = this.request.getData();
    console.log(syncData);

    // 异步调用
    const asyncData = this.request.getCallBackData();
    console.log(asyncData);   //打印出undefined

第一种解决方式:回调函数

定义一个回调函数,来等data拿到时再执行并且返回。这里使用的es6的箭头函数,所以看起来比较简洁。

getCallBackData(func: ( value: string) => void) {
    setTimeout(() => {
      func('这个是回调异步方法返回');
    }, 1000);
  }

// 异步调用
this.request.getCallBackData((data: string) => { console.log(data); });

这样就是传进去一个函数参数,让这个函数拿到值再返回。这样就可以打印出异步函数中的数据了。

第二种解决方式:promise

promise返回一个promise 对象,resolve是成功的返回,reject是失败的返回。

getPromiseData(): Promise<string> {
    return new Promise((resolve, reject) => {
      setTimeout( () => {
        resolve('这是Promise的异步方法返回');
        reject('失败了...');
      }, 1000);
    });
  }

// 异步调用 promise 获取
    this.request.getPromiseData().then((data: string) => {
      console.log(data);
    });

第三种解决方式:RxJS

和promise比较类似,但是这里使用的Observable去分发,调用端去订阅。

  getRxJSData() {
    return new Observable((observer) => {
      setTimeout( () => {
        observer.next('这是Rxjs的异步方法返回');
        // observer.error('失败了...');
      }, 1000);
    });
  }

    // 异步调用 rxjs 获取
    this.request.getRxJSData().subscribe( (data) => {
        console.log(data);
    });

rxjs 和 promise 的基础用法比较相似,但是rxjs其实比promise强大的多,比如rxjs可以中途撤回,rxjs可以发射多个值,rxjs提供了多种工具函数。
#######RxJS取消订阅
通过 unsubscribe() 方法来实现超时取消订阅取消订阅,

// 异步调用 rxjs 超过 2s 自动撤回
const stream = this.request.getRxJSData().subscribe( (data) => { console.log(data); });
setTimeout( () => { stream.unsubscribe(); }, 2000);
RxJS多次订阅

每隔1s中再次获取异步方法中的数据。多次执行。

getRxJSIntervalData() {
    let count = 0;
    return new Observable<string>( (observer) => {
      setInterval( () => {
        count++;
        observer.next(`这是RxJS的异步方法返回 ${count}`);
      }, 1000);
    });
  }

// 异步调用 rxjs 每隔 1s 自动触发订阅
this.request.getRxJSIntervalData().subscribe( (data) => {
   console.log(data);
});
RxJS的工具函数

RxJS的工具函数很多,但是这里只举例说明两个,map和filter。

  • map 和 filter
    fileter很好理解,就是过滤,而map也好理解,如python的map高阶函数一样。

相关文章

  • 介绍RxJS在Angular中的应用

    RxJS是一种针对异步数据流编程工具,或者叫响应式扩展编程;可不管如何解释RxJS其目标就是异步编程,Angula...

  • ng4.x http数据请求 --- 不用RxJS

    【此例通过Http、Jsonp请求数据 ---- 不用RxJS】 【RxJS:是一种针对异步数据流编程工具,或者叫...

  • ng4.x http数据请求 --- 使用RxJS

    【此例通过Http、Jsonp请求数据 ---- 使用RxJS】 【RxJS:是一种针对异步数据流编程工具,后者叫...

  • angular-rxjs

    rxjs和promise比较像,也是解决异步数据流的一种方案,不过rxjs比promise的功能更强大,可以理解成...

  • RxJS异步数据流

    RxJS 是 ReactiveX 编程理念的JavaScript 版本。他是针对异步数据流的编程,简单的说就是将一...

  • RxJS 入门

    RxJS 是什么 Reactive Programming(响应式编程) 是使用异步数据流进行编程的技术,简称 R...

  • rxjs 作用

    rxjs的思想是,基于数据流 的 响应式编程 主要作用:将各种异步处理都抽象成同一种“数据流类型” Observa...

  • 创建数据流

    注: 学习程墨老师《深入浅出RxJS》的笔记在RxJS中,一切都以数据流为中心,数据流以Observable类的实...

  • 响应式编程数据管道&组件间通讯的demo练习

    第五章知识点记录: (1)rxjs包的引入:是一种针对异步数据流编程工具,或者叫响应式扩展编程;可不管如何解释Rx...

  • 基于 version 6 的 RxJS 入门

    分享几个网站RxJS官网开发手册 RxJS 是什么? 我们可以简单的认为 RxJS 是一套处理异步编程的 API ...

网友评论

      本文标题:RxJS异步数据流

      本文链接:https://www.haomeiwen.com/subject/tancaqtx.html