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 相关文章推荐
js 函数的执行环境和作用域链的深入解析
Nov 01 Javascript
解析JavaScript中的不可见数据类型
Dec 02 Javascript
Javascript中浮点数相乘的一个解决方法
Jun 03 Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
详解javascript高级定时器
Dec 31 Javascript
jQuery多级联动下拉插件chained用法示例
Aug 20 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
Javascript 实现放大镜效果实例详解
Dec 03 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
Jan 03 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 数组实例说明
2008/08/18 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
javascript编程起步(第六课)
2007/01/10 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
JS跨域代码片段
2012/08/30 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
Python Requests 基础入门
2016/04/07 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
关于赌博的检讨书
2014/01/08 职场文书
清扬洗发水广告词
2014/03/14 职场文书
三年级小学生评语
2014/04/22 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
大学生逃课检讨书
2015/05/04 职场文书
个人道歉信大全
2019/04/11 职场文书
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android