javascript - 创建 Cycle.js 可重用模块

标签 javascript reactive-programming cyclejs

让我们想象一下,在面向对象的世界中,我想构建一个 Torrent 对象来监听网络并让我与其交互。它将继承一个 EventEmitter 并且看起来像这样:

var torrent = new Torrent(opts)
torrent.on('ready', cb) // add torrent to the UI
torrent.on('metadata', cb) // update data in the UI

我还可以让它做一些事情:

torrent.stop()
torrent.resume()

当然,如果我想从内存中删除 torrent,我可以调用 torrent.destroy()

这种 OO 方法的一个很酷的事情是,我可以轻松地将这个功能打包到自己的 npm 模块中,进行测试,并为用户提供一个漂亮、干净、可重用的 API。

我的问题是,如何使用 Cycle.js 应用程序实现这一目标?

如果我创建一个驱动程序,不清楚我将如何创建许多种子并拥有自己的独立监听器。另请考虑,我希望以一种其他人可以在其他 Cycle.js 应用程序中轻松重用的方式打包功能。

最佳答案

在我看来,您正在尝试解决一个问题,就像您会写的那样思考 "imperative code" 。 我认为使用自己的监听器创建 Torrent 实例不应该在循环组件中使用。

我会以不同的方式处理它 - 创建 Torrent 模块并弄清楚它的源和接收器是什么。如果该模块应该是可重用和发布的,您可以将其创建为一个函数,该函数将接收流作为参数。也许类似于TodoMVC Task component (然后在其父组件中使用)。

由于该模块可以作为纯函数创建,因此测试它至少应该同样容易。

这种实现当然取决于您的要求,但与模块的通信将仅通过流完成,并且由于它是声明性的,因此不需要您从其他地方调用的诸如 stop() 和 destroy() 之类的方法.

关于javascript - 创建 Cycle.js 可重用模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139104/

相关文章:

javascript - Cycle.js 应用程序未捕获的类型错误

javascript - 如何调用javascript函数以及将表单数据保存到html页面中的文本文件中?

Angular RxJs : Poll HTTP request until timeout or positive response from server

javascript - concatMap 可变数量的 promise 和管道结果作为下一个 promise 的参数

stream - 使用WebFlux的响应zip文件

cyclejs - Cycle.js 和 Motorcycle.js 是否有 Typescript 定义?

javascript - 如何在 Cycle.js 中顺序请求数据?

javascript - 如何用JS显示 block 和无所有背景图像以绝对方式堆叠?

javascript - 读取FF中剪贴板的内容

javascript - 语法错误(声明 "class"变量)