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对象和数组
May 25 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
Jul 11 Javascript
jQuery 插件开发指南
Nov 14 Javascript
js继承call()和apply()方法总结
Dec 08 Javascript
Javascript模拟加速运动与减速运动代码分享
Dec 11 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
jQuery:unbind方法的使用详解
Aug 14 jQuery
javascript数组拍平方法总结
Jan 20 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
Feb 13 Javascript
JavaScript组合设计模式--改进引入案例分析
May 23 Javascript
Vue指令实现OutClick的示例
Nov 16 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
Python描述器descriptor详解
2015/02/03 Python
Python面向对象特殊成员
2017/04/24 Python
python日期相关操作实例小结
2019/06/24 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
建筑设计师岗位职责
2013/11/18 职场文书
自荐信封面
2013/12/04 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
励志演讲稿800字
2014/08/21 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python
让文件路径提取变得更简单的Python Path库
2021/05/27 Python