3 分钟温故知新 RxJS 【创建实例操作符】

简介: RxJS 有很多神奇的东西,包括链式调用、惰性输出值、隔离数据和操作、响应式编程等等;它是函数式编程中 monad 的一种实际应用;它是 promise 的进化形态;它是理解 JS 异步、处理异步的宝剑......所以,借着更文的契机,日日新、月月新,学习 RxJS 接着冲~

image.png

前不久写了 3 篇关于 RxJS 的入门级文章:



在几个月之前,也有两篇关于 RxJS 的探秘:



RxJS 有很多神奇的东西,包括链式调用、惰性输出值、隔离数据和操作、响应式编程等等;


它是函数式编程中 monad 的一种实际应用;它是 promise 的进化形态;它是理解 JS 异步、处理异步的宝剑......


所以,借着更文的契机,日日新、月月新,学习 RxJS 接着冲~

image.png


本篇带来:observables 操作符 —— 创建实例,是基础之基础、重要之重要;

操作符为复杂的异步任务提供了一种优雅的声明式解决方案,创建实例则是方案的起步!


create



create 肯定不陌生了,使用给定的订阅函数来创建 observable ;


// RxJS v6+
import { Observable } from 'rxjs';
/*
  创建在订阅函数中发出 'Hello' 和 'World' 的 observable 。
*/
const hello = Observable.create(function(observer) {
  observer.next('Hello');
  observer.next('World');
});
// 输出: 'Hello'...'World'
const subscribe = hello.subscribe(val => console.log(val));


empty



empty 会给我们一个 空 的 observable,如果我们订阅这个 observable ,它会立即发送 complete 的讯息;


var source = Rx.Observable.empty();
source.subscribe({
    next: function(value) {
        console.log(value)
    },
    complete: function() {
        console.log('complete!');
    },
    error: function(error) {
        console.log(error)
    }
});
// complete!


from



用 from 来接收任何可列举的参数(JS 数组);

// RxJS v6+
import { from } from 'rxjs';
// 将数组作为值的序列发出
const arraySource = from([1, 2, 3, 4, 5]);
// 输出: 1,2,3,4,5
const subscribe = arraySource.subscribe(val => console.log(val));


of



与 from 相似的 of,也是用于操作一个 list,按顺序发出任意数量的值;


// RxJS v6+
import { of } from 'rxjs';
// 依次发出提供的任意数量的值
const source = of(1, 2, 3, 4, 5);
// 输出: 1,2,3,4,5
const subscribe = source.subscribe(val => console.log(val));


fromEvent



fromEvent 将事件转换成 observable 序列;


// RxJS v6+
import { fromEvent } from 'rxjs';
import { map } from 'rxjs/operators';
// 创建发出点击事件的 observable
const source = fromEvent(document, 'click');
// 映射成给定的事件时间戳
const example = source.pipe(map(event => `Event time: ${event.timeStamp}`));
// 输出 (示例中的数字以运行时为准): 'Event time: 7276.390000000001'
const subscribe = example.subscribe(val => console.log(val));


fromPromise



fromPromise 创建由 promise 转换而来的 observable,并发出 promise 的结果;

var source = Rx.Observable
  .fromPromise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello RxJS!');
    },3000)
  })
// 等同于
var source = Rx.Observable
  .from(new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello RxJS!');
    },3000)
  }))


interval



显然,interval 操作和时间有关,它基于给定时间间隔发出数字序列;

// RxJS v6+
import { interval } from 'rxjs';
// 每1秒发出数字序列中的值
const source = interval(1000);
// 数字: 0,1,2,3,4,5....
const subscribe = source.subscribe(val => console.log(val));
// import { interval } from 'rxjs';
// const source = interval(1000);
// 等同于
// var source = Rx.Observable.interval(1000);


timer



timer 是 interval 的升级,用于给定持续时间后,再按照指定间隔时间依次发出数字。


// RxJS v6+
import { timer } from 'rxjs';
/*
  timer 接收第二个参数,它决定了发出序列值的频率,在本例中我们在1秒发出第一个值,
  然后每2秒发出序列值
*/
const source = timer(1000, 2000);
// 输出: 0,1,2,3,4,5......
const subscribe = source.subscribe(val => console.log(val));


OK,以上便是对核心的创建实例的 Observable 操作符的介绍,温故知新、日日新(^__^)



相关文章
|
机器学习/深度学习 数据采集 人工智能
人工智能安全(下)
人工智能安全(下)
1232 0
人工智能安全(下)
|
数据可视化 NoSQL 关系型数据库
数据中枢平台 · 致力于打造行业场景化数据枢纽
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
数据中枢平台 · 致力于打造行业场景化数据枢纽
|
机器学习/深度学习 搜索推荐 PyTorch
基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
本文详细讲解了如何在昇腾平台上使用PyTorch训练推荐系统中的经典模型DIN(Deep Interest Network)。主要内容包括:DIN网络的创新点与架构剖析、Activation Unit和Attention模块的实现、Amazon-book数据集的介绍与预处理、模型训练过程定义及性能评估。通过实战演示,利用Amazon-book数据集训练DIN模型,最终评估其点击率预测性能。文中还提供了代码示例,帮助读者更好地理解每个步骤的实现细节。
|
存储 Windows
新电脑硬盘如何分区?新手一步一步轻松搞定
新电脑硬盘如何分区?新手一步一步轻松搞定
|
存储 边缘计算 安全
边缘计算与云计算的协同工作:技术解析与应用前景
【8月更文挑战第4天】边缘计算与云计算的协同工作是未来信息技术发展的重要趋势。通过合理地分配任务和资源,两者可以相互补充、发挥各自的优势,实现更高效的数据处理和分析。这种协同模式不仅提高了系统的性能和可靠性,还满足了复杂多变的应用需求,为人工智能、物联网等技术的发展提供了强有力的支持。
1482 11
|
机器学习/深度学习 XML 人工智能
Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性
Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性
Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性
|
缓存 小程序 安全
微信PC端小程序无法加载数据
某些小程序在PC端小程序打开会出现白屏或无法加载数据的情况,本篇文章整理了几种常见情况的解决方案。
3577 1
|
Python 容器
.pack(side=tk.LEFT
.pack(side=tk.LEFT
568 1
|
存储 算法 数据挖掘
力扣173题:二叉搜索树迭代器(含模拟面试)
力扣173题:二叉搜索树迭代器(含模拟面试)
|
运维 安全 BI
工控CTF_纵横网络靶场_简单流量分析
工控CTF_纵横网络靶场_简单流量分析
工控CTF_纵横网络靶场_简单流量分析

热门文章

最新文章