前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3 分钟温故知新 RxJS 【创建实例操作符】

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

作者头像
掘金安东尼
发布2022-09-19 10:43:37
6220
发布2022-09-19 10:43:37
举报
文章被收录于专栏:掘金安东尼

theme: juejin

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情


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

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

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

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

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

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

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

create

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

代码语言:javascript
复制
// 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 的讯息;

代码语言:javascript
复制
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 数组);

代码语言:javascript
复制
// 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,按顺序发出任意数量的值;

代码语言:javascript
复制
// 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 序列;

代码语言:javascript
复制
// 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 的结果;

代码语言:javascript
复制
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 操作和时间有关,它基于给定时间间隔发出数字序列;

代码语言:javascript
复制
// 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

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

代码语言:javascript
复制
// 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 操作符的介绍,温故知新、日日新(^__^)


我是掘金安东尼,输出暴露输入,技术洞见生活,再会~ 👍👍👍

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • theme: juejin
    • create
      • empty
        • from
          • of
            • fromEvent
              • fromPromise
                • interval
                  • timer
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档