gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:16:43 25 4
gpt4 key购买 nike

让我们想象一下,在面向对象的世界中,我想构建一个 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() 和 destroyed() 这样的方法,您可以从其他地方调用这些方法.

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com