RxJS在TypeScript中的简单使用详解


Posted in Javascript onApril 13, 2020

1. 安装

# 安装 typescript, rxjs 包
npm install -D typescript @types/node
npm install rxjs

2. 使用

2.1 使用 from 来从数组生成源

RxJS 有许多创建源的方法,如 from, fromEvent..., 这里使用 from做个例子

import {from} from 'rxjs'

// 从数组生成可订阅对象
// obser 的对象类型为 Observable
let obser = from([1,2,3,4,5])
// 消费对象
// next 当管道中有值流动,就会出发next
// 当发生错误是会触发 error
// 当循环完数组时,会调用complete
obse.subscribe({
  next(item) {
    console.log(item)
  },
  error(err) {
    console.log(err)
  },
  complete() {
    console.log("Done")
  }
}

2.2 自定义生成源

import {Observable, from} from 'rxjs'

// 新建一个可订阅对象
let obser = new Observable<string>(productor => {
  // 自定义数据流
  productor.next("hello")
  productor.next("world")
  setTimeout(()=>{
    productor.next("After 1 Sec")
    productor.complete()
  }, 1000)
})

// 消费
obse.subscribe({
  next(item) {
    console.log(item)
  },
  error(err) {
    console.log(err)
  },
  complete() {
    console.log("Done")
  }
}

3. 实际例子,使用 Redis

3.1 安装 Redis

npm install redis @types/redis

3.2 使用

import {RedisClient} from "redis"
import {Observable} from "rxjs"
// 连接redis, redisclient 的构造类型是”ClientOpt接口“,只要是符合其字段定义的对象就可以
let reids = new RedisClient({
  host:"localhost",
  port:6379
})
// redis的操作都是异步操作,通过回调使用,很容易陷入毁掉地狱
redis.set("name", "tom", (err, res)=>{
  // 需要在set成功后同步的操作
  if(!err) {
    redis.get("name", (err,res)=> {
      console.log(res)
    })
  }
})

// 可以使用 Promise 封装上面的方法,但我们这里使用 rxjs的事件流
let redisObser = new Observable(productor => {
// 这个列子没啥实际用途,只做演示
  redis.set("name", "jack", (err, res) => {
    productor.next(res)
    productor.complete()
  })
})
// 消费代码
obse.subscribe({
  next(key) {
    // 读取或其他需保证在 set 后的操作
    redis.get(key, (err, res) => {
      console.log(res)
    })
  },
  error(err) {
    console.log(err)
  },
  complete() {
    console.log("Query Finish")
  }
}

到此这篇关于RxJS在TypeScript中的简单使用详解的文章就介绍到这了,更多相关TypeScript使用RxJS内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
javascript hashtable 修正版 下载
Dec 30 Javascript
jQuery实现form表单reset按钮重置清空表单功能
Dec 18 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
JavaScript禁止复制与粘贴的实现代码
May 16 Javascript
通过javascript进行UTF-8编码的实现方法
Jun 27 Javascript
Bootstrap图片轮播效果详解
Oct 17 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
React BootStrap用户体验框架快速上手
Mar 06 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
Sep 03 Javascript
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
浅谈JavaScript中this的指向更改
Jul 28 Javascript
JS错误处理与调试操作实例分析
Apr 13 #Javascript
JS正则表达式常见函数与用法小结
Apr 13 #Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 #Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
Apr 13 #Javascript
JavaScript创建表格的方法
Apr 13 #Javascript
JavaScript实现捕获鼠标坐标
Apr 12 #Javascript
jquery实现轮播图特效
Apr 12 #jQuery
You might like
PHP在Web开发领域的优势
2006/10/09 PHP
基于mysql的论坛(1)
2006/10/09 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
使用PHP编写发红包程序
2015/07/22 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
javascript 继承实现方法
2009/08/26 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
python使用心得之获得github代码库列表
2014/06/25 Python
python实现手机通讯录搜索功能
2018/02/22 Python
详解Python学习之安装pandas
2019/04/16 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
党员教师四风自我剖析材料
2014/09/30 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
民事上诉状范文
2015/05/22 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
Django migrate报错的解决方案
2021/05/20 Python
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python