【问题标题】:How does Javascript match the parameters for the callback function in fs.watchFile()Javascript如何匹配fs.watchFile()中回调函数的参数
【发布时间】:2019-03-16 04:37:14
【问题描述】:

我正在尝试为一个项目重新创建 fs.watchFile(),但我对某个特定主题有点困惑。问题是这个回调函数的参数 currprev 是如何填充的?

fs.watchFile('message.text', (curr, prev) => {
    console.log(`the current mtime is: ${curr.mtime}`);
    console.log(`the previous mtime was: ${prev.mtime}`);
});

我检查了节点目录并分析了 watchFile() 函数的定义,但发现它只返回一个 stat 对象的实例。

https://github.com/nodejs/node/blob/master/lib/fs.js

【问题讨论】:

    标签: javascript node.js filesystems


    【解决方案1】:

    这个答案会有一堆链接到一堆代码,这在 StackOverflow 中是不可取的,但我认为在这种情况下这是最好的。

    我认为this 是您要查找的代码。来自here,其中侦听器(您的函数)与stat 变量上的事件“更改”挂钩,该变量是StatWatcher(在第一个文件I linked to 中定义。

    【讨论】:

    • 我能问一下传递给 onChange(newstatus, stats) 的值是否恰好是“更改”和侦听器函数吗?另外我假设 self.emit 是什么返回 curr 和 prev?
    【解决方案2】:

    当在lib/internal/fs/watchers.js 中定义的相应 StatWatcher 实例上发出“更改”事件时,将触发回调。 StatWatcher 作为 watchFile() 函数的一部分在lib/fs#line 1349 中创建。 StatWatcher 的底层实现是用本机代码编写的。

    当您想推出自己的实现时,查看inotify package 可能会有所帮助,它在 Linux 系统上实现了监视文件系统事件。请注意,每个“操作系统”都有其“文件更改”事件的概念。

    【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多