我正在使用fs.watch()
监视多个网络文件夹,每个文件夹都位于不同的IP上。问题在于,有时这些网络驱动器会脱机,而我需要重试观看它们,直到它们联机。
我编写的代码如下:
watchFolder() {
var self = this
let path = `\\\\${this.pathIP}\\folder1`
try {
fs.watch(path, (eventType, filename) => {
...
}
}
catch (err) {
//drive is offline
setTimeout ( () => {
this.watchFolder()
}, 1000);
}
}
我试图每秒从catch
调用相同的函数,这样,如果它联机,它将正常继续,但是由于递归,显然这会占用过多的内存。有什么方法可以替代我想要实现的目标?
答案 0 :(得分:0)
一种解决方案是将代码重构为循环,避免递归,并使用JS中的新sleep
功能来实现延迟。
let keep_checking = true;
while (keep_checking) { // exit condition
let path = `\\\\${this.pathIP}\\folder1`
try {
fs.watch(path, (eventType, filename) => {
// Drive is online, do stuff
// ...
// Remember to set the exit condition
// eg. keep_checking = false;
}
}
catch (err) {
// Drive is offline
await sleep(1000);
}
}
这篇文章详细介绍了sleep
的用法:
What is the JavaScript version of sleep()?