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 相关文章推荐
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
Mar 06 Javascript
javascript比较文档位置
Apr 08 Javascript
javascript 鼠标滚轮事件
Apr 09 Javascript
javascript 客户端验证上传图片的大小(兼容IE和火狐)
Aug 15 Javascript
如何确保JavaScript的执行顺序 之实战篇
Mar 03 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
May 21 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
Dec 08 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
Sep 06 Javascript
AngularJS 2.0新特性有哪些
Feb 18 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
JS实现带动画的回到顶部效果
Dec 28 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 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中simplexml_load_string函数使用说明
2011/01/01 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
php实现可逆加密的方法
2015/08/11 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
Python中os模块功能与用法详解
2020/02/26 Python
python3 使用traceback定位异常实例
2020/03/09 Python
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
学校后勤岗位职责
2014/02/19 职场文书
电台编导求职信
2014/05/06 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
八年级上册语文教学计划
2015/01/22 职场文书
送达通知书
2015/04/25 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
javascript的setTimeout()使用方法总结
2021/11/20 Javascript