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 相关文章推荐
javascript学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
按下Enter焦点移至下一个控件的实现js代码
Dec 11 Javascript
使用javascript获取页面名称
Dec 23 Javascript
javascript去除空格方法小结
May 21 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
ES6中字符串string常用的新增方法小结
Nov 07 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
微信小程序全局变量功能与用法详解
Jan 22 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
Aug 20 Javascript
详解Vue 的异常处理机制
Nov 30 Vue.js
Rust中的Struct使用示例详解
Aug 14 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
详解Window7 下开发php扩展
2015/12/31 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
php正则修正符用法实例详解
2016/12/29 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
JS 建立对象的方法
2007/04/21 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
解密Python中的描述符(descriptor)
2015/06/03 Python
Python实现建立SSH连接的方法
2015/06/03 Python
浅谈Python的文件类型
2016/05/30 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
简单了解python的内存管理机制
2019/07/08 Python
django数据库自动重连的方法实例
2019/07/21 Python
Python3分析处理声音数据的例子
2019/08/27 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
python打包生成so文件的实现
2020/10/30 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
新闻网站实习自我鉴定
2013/09/25 职场文书
师范生实习自我鉴定
2013/11/01 职场文书
一年级班主任寄语
2014/01/19 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
租房协议书
2014/09/12 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js