{}) if (`${eventType}` === 'chan-6ren">
gpt4 book ai didi

javascript - fs.watch 事件和 websockets,捕捉 "no-change"情况

转载 作者:行者123 更新时间:2023-11-30 20:03:37 24 4
gpt4 key购买 nike

我看一个文件:

fs.watch('./data/object.json', (eventType, filename) => {})
if (`${eventType}` === 'change'){
// I call my emission function.
emission(/* passing the contents of the file here */);
})

发射函数是这样的:

// Just a dummy place-holder function.
// We later replace that with the real function inside the websocket
// block.
var emitter = function() {};

// Define a hook for the emission point.¬
// 'input' is the bit that receives the contents of the file.
var emission = function(input) {
emitter(input);
};

我这样做是因为我稍后会在 websocket 调用中注入(inject)该函数:

wss.on('connection', function(ws) {
emitter = function(input){
// This receives the contents of the file through the input.
// Do some more stuff, convert 'input' into 'data'...
// ... and send to the client.
wss.clients.forEach(function(client) {
client.send(data);
}
}
});

所以我在 websocket 连接 block 内将虚拟发射器功能与真实发射器功能交换。

虽然有点令人费解,但到目前为止这是可行的。当文件内容发生变化时,我会向客户端发送实时恒定流。

我的问题是:我无法捕获文件内容不再更改的事件。我需要能够捕捉到它并让客户知道该文件不再更改。

解决这个问题的最佳方法是什么?

最佳答案

fs.watch 回调中,只需创建一个计时器来定期检查文件是否正在更改。

var changing = false;
var timer = null;

function checkChanging() {
if (!changing) {
clearInterval(timer);
timer = null;

notifyNoChange();
}
changing = false;
}

fs.watch('./data/object.json', (eventType, filename) => {})
if (`${eventType}` === 'change'){
if (!timer ) {
timer = setInterval(checkChanging, 1000);
}

changing = true;

// I call my emission function.
emission(/* passing the contents of the file here */);
})

计时器是在文件第一次开始更改时设置的。如果您想要处理文件根本没有开始更改的情况,您可能需要重构此代码。checkChanging 函数将检查在最后一秒内是否有文件更改,并调用 notifyNoChange 函数(您需要实现)。

关于javascript - fs.watch 事件和 websockets,捕捉 "no-change"情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53137126/

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