rxjs-工具类操作

作者: bugWriter_y | 来源:发表于2019-06-26 14:42 被阅读0次
timg (1).jpg

tap

对发射过来的数据执行一个函数,返回原来的数据(即使修改了数据)。例如用于调式打印程序等等作用

import { tap } from "rxjs/operators";
import { interval } from "rxjs";
interval(1000)
  .pipe(tap(_ => console.log(_)))
  .subscribe(x => {});

delay

延迟数据的发射

import { delay } from "rxjs/operators";
import { fromEvent } from "rxjs";
fromEvent(document, "click")
  .pipe(delay(1000))
  .subscribe(x => console.log(x));

timeInterval

其实属于转换操作,将接收到的数据x变成{value:x,interval:数字}的对象,并发射出去。其中value是原本的值,interval是前一个数据与后一个数据的间隔时间

import { timeInterval } from "rxjs/operators";
import { fromEvent } from "rxjs";
fromEvent(document, "click")
  .pipe(timeInterval())
  .subscribe(x => console.log(x));

timestamp

其实也属于转换操作。将接收到的数据x变成{value:x,timestamp:数字}的对象,并发射出去。其中value是原本的值,timestamp是当前时间戳

import { timestamp } from "rxjs/operators";
import { fromEvent } from "rxjs";
fromEvent(document, "click")
  .pipe(timestamp())
  .subscribe(x => console.log(x));

timeout

当指定时间内没有发射数据或者结束(complete)的话,抛出一个error。例如http请求

import { catchError, timeout, retry } from "rxjs/operators";
import { of } from "rxjs";
this.http
  .get<[]>(`http://localhost:4000/users`)
  .pipe(
    timeout(1000),
    retry(1000),
    catchError(err => {
      if (err.name === "TimeoutError") {
        console.error("请求超时:", err);
      } else {
        console.error("http请求错误", err);
      }
      return of([]);
    })
  )
  .subscribe(users => {
    console.log(users);
  });

timeoutWith

类似于timeout,但是接受一个新的数据源。例如http请求,我们可以利用这个操作符来实现当请求超时了返回一个指定值

import { timeoutWith } from "rxjs/operators";
import { of } from "rxjs";
this.http
  .get<[]>(`http://localhost:4000/users`)
  .pipe(timeoutWith(1000, of([])))
  .subscribe(users => {
    console.log(users);
  });

toArray

将一个数据源的所有发射的数据组成一个数组并返回(只有当外部源结束了才会发射)。可以理解为它会将数据缓存着,直到结束了一并发射出去

interval(1000)
  .pipe(
    take(4),
    toArray()
  )
  .subscribe(x => console.log(x));

相关文章

网友评论

    本文标题:rxjs-工具类操作

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