问题描述
编辑:我正在使用 main.js 或任何其他文件中的以下函数来加载其他文件。在我的情况下,我使用 chokidar 重新加载更改文件
function requireUncached(modulePath) {
delete require.cache[require.resolve(modulePath)];
return require(modulePath);
}
requireUncached('./test.js')
运行以下代码:
while(true) {
// Edit: file_loaded is referring to the current file where this code resides
if (!file_loaded) // file_loaded is the part I need help with
break;
// do something
// eg:
console.log('hello')
await new Promise(resolve => setTimeout(resolve,1000))
}
当这个文件被卸载(或用新版本重新加载)时,它将继续运行并无限期地打印“hello”。
我尝试设置一个全局变量来通知循环终止。但这也会干扰新缓存的文件。
有没有办法获取节点区域/上下文是否已缓存?或者有没有办法完全停止/销毁正在运行的上下文?
编辑:这是一个您可以尝试的简单示例:
main.js
function requireUncached(modulePath) {
delete require.cache[require.resolve(modulePath)];
return require(modulePath);
}
requireUncached('./test.js')
requireUncached('./test.js')
requireUncached('./test.js')
test.js
init()
async function init() {
while (true) {
console.log('hello')
await new Promise(resolve => setTimeout(resolve,1000))
}
}
运行:node main.js
注意 'Hello' 是如何每秒打印 3 次而不是 1 次,因为使用 delete require.cache 时异步函数不会停止。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)