import { EventEmitter } from 'eventemitter3'; class H5SSE extends EventEmitter 代码解析 将对象类继承观察者模式,可监听对象(on,emit),,,RxJS 基于观察者模式和可观察对象(Observable)的概念。它允许你以声明性的方式处理异步事件流,并提供了丰富的操作符来转换、过滤和组合数据流

import { EventEmitter } from 'eventemitter3';
class H5SSE extends EventEmitter
代码解析

通过eventemitter3源码学习Javascript设计模式:发布-订阅(观察者模式)

发布-订阅模式又叫观察者模式,它定义对象之间一对多的关系,当一个对象的状态发生变化时,所有依赖它的对象都将得到通知。在javascript开发中,我们一般使用事件模型来替代传统的发布-订阅模式。

上述代码是一个 TypeScript 类的定义,其中使用了 eventemitter3 模块中的 EventEmitter 类。让我们逐行解析代码:

import { EventEmitter } from 'eventemitter3';

这行代码从 eventemitter3 模块中导入了 EventEmitter 类。

class H5SSE extends EventEmitter {

这行代码定义了一个名为 H5SSE 的类,该类继承自 EventEmitter 类。

继承自 EventEmitter 类意味着 H5SSE 类可以使用事件的发布和订阅功能。EventEmitter 是一个常用的事件处理类,它允许类实例触发事件并允许其他对象订阅这些事件。

通过继承 EventEmitter 类,H5SSE 类可以使用以下方法和功能:

  • on(eventName, listener):订阅事件,当指定的事件被触发时执行回调函数。
  • once(eventName, listener):订阅一次性事件,当指定的事件第一次被触发时执行回调函数。
  • emit(eventName, ...args):触发指定的事件,并传递参数给事件的监听器。
  • removeListener(eventName, listener):从事件的监听器列表中移除指定的监听器。
  • 等等。

H5SSE 类中,你可以使用这些方法来处理事件和实现自定义的事件逻辑。

注意:在使用上述代码之前,确保已安装 eventemitter3 模块,可以使用 npm 或 yarn 进行安装。

通过eventemitter3源码学习Javascript设计模式:发布-订阅(观察者模式):https://zhuanlan.zhihu.com/p/472038219


https://cn.rx.js.org/about.html
https://www.jianshu.com/p/a567e5831257
关于中文版 | RxJS 中文文档:rxjs: 一组用来处理异步或事件的 js 函式库 核心概念: rxjs是一个使用观察者模式来整合异步操作和事件系统的js库,通过一系列可观测的流(observable)将它们串联起来。 Observable是这个库的核心类型,此外还包括诸如Observer,Schedulers,Subjects等类型。 还包括一些和数组方法类似或经过演化的操作符,用来协助处理数据。

RxJS(Reactive Extensions for JavaScript)是一个用于处理异步和基于事件的编程库。它提供了一组强大的工具和操作符,用于处理数据流和事件序列。

RxJS 基于观察者模式和可观察对象(Observable)的概念。它允许你以声明性的方式处理异步事件流,并提供了丰富的操作符来转换、过滤和组合数据流。

以下是 RxJS 的一些关键概念和常用操作符:

  • Observable(可观察对象):表示一个异步的数据流,可以发出多个值,也可以发出错误或完成的信号。

  • Observer(观察者):订阅 Observable,并接收它发出的值、错误或完成的信号。

  • Subscription(订阅):表示观察者与可观察对象之间的连接,可以用于取消订阅和释放资源。

  • Operators(操作符):用于对 Observable 进行转换、过滤、组合和操作的函数。例如,mapfiltermergeMap 等。

  • Subject(主题):是一个特殊的可观察对象,既可以作为 Observable 发出值,也可以作为 Observer 接收值。

  • Schedulers(调度器):用于控制 Observable 的执行时机和顺序,可以用于处理异步操作的调度和并发。

RxJS 提供了丰富的操作符和工具,使得处理异步数据流和事件序列变得更加简洁和灵活。你可以在 RxJS 的官方文档中了解更多关于 Observable、操作符和其他概念的详细信息。

在使用 RxJS 时,你可以通过安装 rxjs 包来引入库,并在你的 JavaScript/TypeScript 代码中使用相应的操作符和工具。

希望这个简介能帮助你理解 RxJS 的基本概念。如果你有进一步的问题,请随时提问!

当涉及到 RxJS 的使用示例时,下面是一个简单的示例,帮助你理解如何创建 Observable、订阅观察者以及使用一些常见的操作符:

import { from } from 'rxjs';
import { map, filter } from 'rxjs/operators';

// 创建一个 Observable 来发出一系列数字
const numbers = from([1, 2, 3, 4, 5]);

// 使用操作符对 Observable 进行转换和过滤
const squaredEvenNumbers = numbers.pipe(
  filter((num) => num % 2 === 0), // 过滤偶数
  map((num) => num * num) // 平方
);

// 订阅观察者以接收 Observable 发出的值
squaredEvenNumbers.subscribe(
  (result) => console.log(result), // 打印结果
  (error) => console.error(error), // 处理错误
  () => console.log('Complete') // 处理完成信号
);

在上面的示例中,我们首先使用 from 操作符创建了一个 Observable,该 Observable 发出了一系列数字。然后,我们使用 filter 操作符过滤出偶数,并使用 map 操作符将每个数字平方。最后,我们订阅了这个 Observable,并定义了观察者的行为。

当我们运行这个示例时,观察者将收到过滤和转换后的结果,并将其打印到控制台上。如果出现错误,我们会在观察者的错误处理函数中进行处理。当 Observable 发出所有值并完成时,我们会在观察者的完成处理函数中得到通知。

这只是 RxJS 的一个简单示例,你可以使用更多的操作符和技术来处理更复杂的数据流。RxJS 提供了许多操作符,如 mergeMapswitchMapreduce 等,用于更高级的数据转换和组合。

希望这个示例能帮助你入门 RxJS。如果你有任何进一步的问题,请随时提问!

posted @ 2023-12-28 16:36  yoona-lin  阅读(41)  评论(0编辑  收藏  举报