RxJS 是一个流行的 JavaScript 库,支持响应式编程。从 RxJS 5 开始,该库引入了 lettable operators,以使其 API 更加一致和易于使用。本文介绍了一些简单的示例,以帮助您理解 lettable operators,并展示它们是如何简化 RxJS 代码的。
什么是 lettable operators?
在 RxJS 5 及更早版本中,您可以使用巨大的操作符集合来转换 Observable 流。这些操作符作为 Observable 实例上的实例方法进行调用,例如:
import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/filter'; import 'rxjs/add/operator/map'; Observable.of(1, 2, 3) .filter(x => x % 2 === 0) .map(x => x * x) .subscribe(x => console.log(x)); // 输出 4
在 RxJS 6 中,这些操作符被称为滤镜(pipeable)操作符。这些操作符现在是独立的函数,并被 import 到你的代码中,你可以使用管道(pipe)函数将它们连接在一起。这种方式被称为 lettable operators。
以下是相同的代码使用 lettable operators:
-- -------------------- ---- ------- ------ - -- - ---- ------- ------ - ------- --- - ---- ----------------- ----- ------- - ----- -- -------- -------- -- - - - --- --- ----- -- - - -- -- ------------------- -- ---------------- -- -- -
lettable operators 构成了一个更小的 API,并使得 Observable 的链式操作变得更加直观。
让我们来看一下实际的例子
下面介绍了 lettable operators 是如何简化异步编程的。
假设你有一个搜索功能,当用户开始输入内容时,你需要发起 Ajax 请求。你可能需要在两个不同的流(用户输入事件和 Ajax 响应)上应用不同的变换。
在 RxJS 5 中,您会编写代码类似于以下内容:
-- -------------------- ---- ------- ------ - ---------- - ---- ------------------ ------ --------------------------------- ------ ----------------------------------------- ------ ------------------------------ ----- ------ - ----- -- ----- ------------------ ----------------------- ---------------- -- ------------------- ----- ----------------- -- ---------- -------------------------------------------------------------------------------------------------- ------------------ -------- --------- ------------ -- ------------- -- ----------
在 RxJS 6 中,您可以将搜索流链到您的操作:
-- -------------------- ---- ------- ------ - --------- - ---- ------- ------ - ---- - ---- ------------ ------ - ------------- --------------------- ---- ------ --------- - ---- ----------------- ----- ----- - ---------------------------------------- ----- ------ - ----- -- ---------------- -------------- ------------------ ----------------------- --------- -- -------------------- --------------- -- --------------------------------------------------------------------------------------------------- ----------------- -------- ---------- ----------- -- ------------- -- --------- -- -------------------------------------
注意,这里没有需要导入的操作符。让我们来逐步分析一下这个代码的变化:
debounceTime
,distinctUntilChanged
,pluck
和switchMap
都不再是实例方法,而变为了 operator 的常规函数。Observable.of
被简化为fromEvent
函数,这个函数直接创建了一个 Observable 流以从事件中发出值。map
操作符现在被用于每个变换步骤。
所有这些变化都使您的代码更加直观和易于维护。
结论
RxJS 的 lettable operators 使得 RxJS 6 的代码更加简洁清晰,使得流程操作逻辑更加一致,减少了需要导入的操作符,大大简化了开发者的代码书写并且方便维护。如果你正在使用 RxJS 6,并且正在写大量的 Observable 流,请考虑使用 lettable operators 简化您的代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6775ea416d66e0f9aa071990