【问题标题】:Boolean fileContainsString not working布尔文件包含字符串不起作用
【发布时间】:2017-03-17 10:35:01
【问题描述】:

我有一个函数,它返回一个文件是否包含字符串的布尔值。我知道 checkFileForString 函数运行并将布尔值正确分配为 true,但底部 if 语句中的代码没有运行。

        var checkFileForString = function (fileName) {

            var yesStringFound = false;

            fs.readFile(fileName, function (err, data) {
                if (err) throw err;
                if(data.indexOf('yes') >= 0){
                    yesStringFound = true;
                }
                console.log('YES STRING FOUND: ' + yesStringFound);
            });
            return yesStringFound;

        };


            console.log("instanceCount >= 4...");
            if (checkFileForString(quadrantFile0) == true) { //todo: confirm and fix
                console.log("runs...");
                assignToQuadrant(0, maxInstances);
                quadrantOccupied = 0;
                setQuadrantAsUnavailable(quadrantOccupied);
            }

【问题讨论】:

  • 提示:return yesStringFound 在你的内部函数中...
  • @nnnnnn 我更新了(见问题)函数但它没有解决问题,函数仍然运行并返回正确的布尔值但 if 语句没有运行
  • 好吧,更详细的解释:.readFile()方法不是异步的吗?这意味着checkFileForString() 函数将在调用.readFile() 的回调之前返回,因此每次都返回false。你可以重构你的代码来返回一个承诺,或者将一个回调传递给checkFileForString()
  • @nnnnnn 啊,你是对的,我尝试了 .readFile()... .readFileSync() 的同步实现,它有效。谢谢!

标签: javascript fs


【解决方案1】:

我在@nnnnnn 的帮助下得到了解决方案:

        var checkFileForString = function (fileName) {

            var yesStringFound = false;
            var jsonFile = fs.readFileSync(fileName);
            if(jsonFile.indexOf('yes') >= 0)
                yesStringFound = true;

            return yesStringFound;
        };

【讨论】:

  • function checkFileForString(fileName){ return fs.readFileSync(fileName).includes('yes') }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多