NestJS学习笔记之Nestjs和RxJs

在 Nestjs已经内置了RxJs,无需安装,并且Nestjs也会有一些基于Rxjs提供的API

Rxjs 中文文档Observable | RxJS 中文文档

概念

RxJs使用的是观察者模式,用来编写异步队列和事件处理。

Observable:可观察的物件

Subscription:监听Observable

Operators:纯函数,可以处理管道的数据,如map、filter、concat、reduce等

案例

Observable的简单用法

类似于迭代器next,observable发出通知,complete通知完成

susubscribe订阅observable发出的通知 ,也就是一个观察者

import { Observable } from "rxjs";

const observable = new Observable((subscribe) => {
  subscribe.next(1)
  subscribe.next(2)
  subscribe.next(3)

  // 支持异步,等待2秒后打印出4
  setTimeout(() => {
    subscribe.next(4)
  }, 2000);
})

observable.subscribe({
  next:(value)=>{
    console.log(value);
  }
})

案例1

按顺序从0打印到5,每五百毫秒打印输出一个

interval(500):五百毫秒执行一次

pipe就是管道的意思,管道里面也是可以去掉接口的,支持处理异步数据

通过观察者subscribe接受回调

import { Observable, interval, take } from "rxjs";

interval(500).pipe(take(5)).subscribe((e)=>{
  console.log(e);
})

也可以利用map函数把数据改造成对象

import { Observable, interval, map, take } from "rxjs";

interval(500).pipe(map(v => ({ num: v }))).subscribe((e) => {
  console.log(e);
})

会一直打印下去不停止

此时利用unsubscribe函数去过滤终止打印

import { Observable, filter, interval, map, take } from "rxjs";

const subs=interval(500).pipe(map(v => ({ num: v }))).subscribe((e) => {
  console.log(e);
  if(e.num===10){
    subs.unsubscribe()
  }
})

也可以使用filter过滤想要的结果

import { Observable, filter, interval, map, take } from "rxjs";

const subs = interval(500).pipe(map(v => ({ num: v })), filter(v => (v.num % 2 == 0))).subscribe((e) => {
  console.log(e);
  if (e.num === 10) {
    subs.unsubscribe()
  }
})

也可以利用of自定义数据

import { Observable, filter, interval, map, of, take } from "rxjs";

const subs = of(1,2,3,4,5).pipe(map(v => ({ num: v })), filter(v => (v.num % 2 == 0))).subscribe((e) => {
  console.log(e);
  if (e.num === 10) {
    subs.unsubscribe()
  }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值