【发布时间】: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