进行fs.watch直到成功

时间:2019-05-12 17:57:47

标签: node.js try-catch fs

我正在使用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调用相同的函数,这样,如果它联机,它将正常继续,但是由于递归,显然这会占用过多的内存。有什么方法可以替代我想要实现的目标?

1 个答案:

答案 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()?