用户是一个流 – 使用 RxJS 的响应式 Web UI

Exchange insights, tools, and strategies for canada dataset.
Post Reply
suchona.kani.z
Posts: 479
Joined: Sat Dec 21, 2024 5:31 am

用户是一个流 – 使用 RxJS 的响应式 Web UI

Post by suchona.kani.z »

通过所谓的 JavaScript 响应式扩展(简称 RxJS),这些事件可以被视为流,这意味着您可以使用响应式编程模式:


RxJS 是由 Netflix 开发的,并且也在那里得到了有效的使用。我们目前正在致力于基于 TypeScript 完全重写 RxJS。新版本5目前仍处于测试状态。

反应式扩展还可以用于许多其他编程语言。

可观察作为基本构建块
让我们看一个小代码示例,展示 RxJS 的基础知识:
此示例的浏览器控制台中的输出如下所示:


在上面的例子中,创建了一个所谓的 observable,它可以被理解为 RxJS 的基本构建块。所谓的观察者有能力在未定义的时间段内触发n个事件(observer.next())。您可以使用observer.complete() 调用将流标记为已完成。在这次调用之后,不能用observer.next()发出新的值。

创建的 observable 提供了 subscribe() 方法,可用于获取有关以下三件事的通知:

发出了一个新值(第一个参数)。
出现错误(第二个参数)。
流已结束(第三个参数)。
Observable 的 Subscribe 方法可以被调用任意次。

为什么承诺还不够
自 ECMAScript 2015(也称为 ES6)以来,Promise 已成为 JavaScript 标准,为异步操作提供简单的 API。然而,与 Observables 相比,Promise 有一些局限性:

他们只能返回一个结果。
它们无法被取消。
Promise 只能返回一个结果这一事实对于简单的 XMLHttpRequest 来说可能不是 购买比特币电子邮件列表 问题,因为服务器只返回一个响应。但是,对于 Web 套接字连接或浏览器事件(例如单击和键盘输入),情况看起来有所不同。您想要在一段几乎未定义的时间段内处理 n 个值/事件。在这些情况下,反应式扩展是正确的选择,并且比经典的回调函数灵活得多。它们是专门针对这些情况而设计的,并为进一步处理提供了许多有用的方法。

即使使用经典的 XMLHttpRequests,可观察量也比承诺可以提前取消请求具有优势。如果用户在界面上执行不需要终止仍在运行的 XMLHttpRequest 的操作,这会很有用。

RxJS 作为 Angular 2 的一个组成部分
另一个发展是将 RxJS 集成到 Angular 2 中。流行的框架将依赖于新的 RxJS 版本 5,与 Angular 2 一样,该版本也仍处于 beta 状态,并且是基于 TypeScript 的完全重写。

ECMAScript 标准之路
将来,可观察量甚至可能成为 ECMAScript 标准,因此可能会有原生 JavaScript 版本。相应的提案已经在进行中并可在 Github 上获取。相应的 API 是什么样子以及它们提供什么功能还有待观察。

结论
RxJS 是一个非常强大的库,可以使 Javascript 领域的异步操作变得更加容易,并使源代码更具可读性。熟悉响应式编程和 RxJS 概念需要花费大量时间,但从长远来看是值得的。由于与 Angular 2 和其他 JavaScript 框架/库的良好集成,RxJS 在不久的将来肯定会变得更加流行。问题仍然是可观察量是否会包含在 ECMAScript 标准中。你们都是什么意思?
Post Reply