【问题标题】:Baconjs return only last debounce valueBaconjs 只返回最后一个去抖动值
【发布时间】:2018-04-11 09:12:20
【问题描述】:

这里是代码示例:

let watcher;
const streamWatcher = bacon.fromBinder(sink => {
    watcher = chokidar.watch(root, {
        ignored: /(^|[\/\\])\../
    });
    watcher.on('all', (event, path) => {
        sink({
            event: event,
            path: path
        });
        return () => {
            watcher.unwatch(root);
        };
    });
});
streamWatcher
    .skipDuplicates(_.isEqual)
    .map('.path')
    .scan([], (a, b) => {
        a.push(b);
        return a;
    })
    .debounce(300)
    .onValue(files => {
        if (files.length) {
            console.log('change event fired');
            tinyLrSrv.changed({
                body: {
                    files: files
                }
            });
        }
    });

我想要做的是使用 chokidar 监视文件夹更改(正在开发的 Web 目录)然后使用 Bacon.js 进行包装和去抖动(因为我不想知道每个文件更改,只需告诉我一批)并返回更改的文件数组。

问题是 - 数组是从头开始的,所以每次文件更改时,它都会不断添加到原始数组中。

我想得到的是最后更改的文件数组,换句话说,每次onValue收到数组时,保存数组的变量都需要重置。

有没有一种纯粹的 bacon.js 方法可以做到这一点?

【问题讨论】:

    标签: javascript node.js events frp bacon.js


    【解决方案1】:

    想不出一个超级“纯粹”的方法来很好地做到这一点。您是否注意到您实际上是在更改scan 中的缓冲区?您可以利用这一点并实际清除 onValue 代码中的缓冲区。请记住在发送到 tinyLrSrv 时克隆缓冲区。另一种方法是使用变量:

    var files = []
    streamWatcher.skipDuplicates(_.isEqual).map('.path')
      .doAction(a => files.push(a))
      .debounce(300)
      .onValue(() => {
        if (files.length) {
          timyLrSrv.changed({body: {files}})
          files = []
        }
      })
    

    我自己也遇到过类似的问题,但还没有找到一个很好的“纯粹”方法来解决这个问题。请提交针对 Bacon.js 的问题,我们可以确定是否应该向 Bacon.js 核心添加一些内容。

    【讨论】:

    • 我确实试过这个,但是子序列数据返回空。我的意思是使用scan,但我还没有尝试过doAction。会试一试的。
    • doAction 有效。扫描没有(甚至在 onValue 之后重置数组),这是 Bacon.js 的一个有趣行为
    • 如果你想讨论为什么某种方法(基于扫描的东西?)即使你认为它应该工作也不起作用,你可以针对 bacon.js github 代码库发布一个问题,我们'我会看看。请包含可运行代码。
    • 很酷,谢谢,我现在实际上正在用 Bacon.js 构建一个小游戏。所以我肯定有很多话想说:)
    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多