ECMAScript 2017 (ES8) 实现 Observable 对象

阅读时长 4 分钟读完

ECMAScript 2017(ES8)实现Observable对象

Observable是ES7(ECMAScript 2016)提出的概念,它是异步编程中广泛使用的一种设计模式。Observable对象表示一个异步数据流,可以监听它的变化并对变化做出反应。Observable的使用可以使异步编程更加简单和优雅。

Observable的使用

Observable对象能够完成的任务远不止于Promise对象。Observable对象表示的是一个非常通用的数据源,其值会随着时间变化。Observable相比于Promise的好处之一在于它可以产生多个值,并且能够异步推送这些值。例如:

-- -------------------- ---- -------
----- ---------- - --------------------------------------- -
  -----------------
  -----------------
  -----------------
  ------------- -- -
    -----------------
    --------------------
  -- ------
---

----------------- ------ ------------
----------------------
  ------- -
    ---------------- ----- - - ---
  --
  ---------- -
    ------------------------ ----- --------- - - -----
  --
  ---------- -
    --------------------
  -
---
----------------- ----- ------------

输出结果为:

Observable实现

在ES8中,Observable对象被正式纳入ECMA规范,并内置于Javascript中。Observable对象可以使用ES7提供的Symbol.observe方法来创建。在ES8标准中,Observable对象是一个类,它具有subscribe、unsubscribe、constructor等基本方法与属性。

以下是一个实现Observable对象的示例代码:

-- -------------------- ---- -------
----- ---------- -
  ---------------------- -
    --------------- - ----------
  -
  ------------------- -
    ------ --------------------------
  -
  ------------- -
    -- --------
  -
  ------ ---------------- -
    -- ----------------------------
  -
  ------ ----- -------- --- -
    -- ----------------------
  -
  -- -------
-

上述代码中的_subscribe方法代表着一个由开发者定义的观察者函数,它接收一个传入Observable对象的观察者。在内置的Observable对象之中,subscribe方法是被定义为一个内置装饰器:

在这个例子中,subscribe返回了一个函数,它可以在调用时取消该Subscription,这样被订阅的Observable就不会再发送数据。

总结

Observable提供了一种简单的方法在异步编程中处理多个异步事件。Observable内置于ECMA标准中,通过内置的subscribe/next/error/complete方法,能够轻松的实现一个Observable对象。我们可以利用Observable不仅仅实现异步编程的任务,同时也可以实现其他多个观察者模式的功能。通过这个例子,我们可以初步了解Observable的基本概念及其如何实现。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64faac31f6b2d6eab3185fb8

纠错
反馈