fs.existsSync 没有在等待 fs.readFile 里面 if

fs.existsSync is not waiting for fs.readFile inside if

if (fs.existsSync('tmp/cache.txt')) {
        fs.readFile("tmp/cache.txt", function (err, data) {
            if (data != "" || data != "[]") {
                jdata = JSON.parse(data);
                if (
                    jdata[jdata.length - 1].substring(4, 8) ==
                    new Date().getFullYear() + 543
                ) {
                    year = new Date().getFullYear() + 542;
                    console.log("yes this year");
                }
                jdata.forEach(function (value, i) {
                    if (
                        value.substring(4, 8) ==
                        new Date().getFullYear() + 543
                    ) {
                        countloveme--;
                    }
                });
                jdata.splice(countloveme);
            }
        });
    }

我的代码是 运行 但是

代码在 fs.readFile 之前完成 ifelse 已经完成

我不知道如何在 fs.readFile 中添加 await 或无论如何此代码都有效

正如评论中所写,使用fs,readFileSync

会是更好的选择

当您使用 Array.forEach() 时,您正在同步启动一个 运行 的新功能。

我已经清除了你的代码,也许这可以帮助你

if (fs.existsSync('tmp/cache.txt')) {

    try {
        const data = fs.readFileSync("tmp/cache.txt");
        if (!data || data != "" || data != "[]")
            throw new Error('tmp/cache.txt file is empty');

        const jdata = JSON.parse(data);

        // More clear to use variables in the if elses
        const arg1 = jdata[jdata.length - 1].substring(4, 8)
        const arg2 = new Date().getFullYear() + 543;

        if (arg1 === arg2) {
            // You don't use this date anywhere?
            new Date().getFullYear() + 542;
            console.log("yes this year");
        }
        
        for (let dataChunk of jdata) {
            if (
                dataChunk.substring(4, 8) ==
                new Date().getFullYear() + 543
            ) {
                countloveme--;
            }
        }
        jdata.splice(countloveme);

    } catch (error) {
        console.error(error.message);
    }

}