我有一个执行一系列测试的功能。如果第一次测试失败,则该函数应退出,但它不会:
function checkSite(site) {
console.log("Checking if site is already processed or processing");
// Processed Sites
fs.readFile("processed.txt", "utf8", function(error, data) {
if (data.indexOf(site) > -1) {
console.log("Processed");
return "Processed";
} else {
console.log("Not Processed");
}
});
fs.readFile("processing.txt", "utf8", function(error, data) {
if (data.indexOf(site) > -1) {
console.log("Processing");
return "Processing";
} else {
console.log("Not Processing, Queue for Processing");
// Queue for Processing
fs.appendFile(fileProcessing, site, function (err) {
if (err) throw err;
console.log('The "data to append" was appended to file!');
});
}
});
return "Success";
}
我正在获得"已处理"的控制台输出然后是" Processing"。我永远不应该看到" Processing"回到那里。我在这里缺少什么?
答案 0 :(得分:0)
return "Processed"
刚刚从回调函数返回,而不是从checkSite()
返回,因此它不会影响接下来发生的事情。
fs.readFile()
是异步的。如果您希望第二个fs.readFile()
等待第一个fs.readFile()
完成,或者您希望在第一个function checkSite(site) {
console.log("Checking if site is already processed or processing");
// Processed Sites
fs.readFile("processed.txt", "utf8", function(error, data) {
if (data.indexOf(site) > -1) {
console.log("Processed");
} else {
console.log("Not Processed");
fs.readFile("processing.txt", "utf8", function(error, data) {
if (data.indexOf(site) > -1) {
console.log("Processing");
} else {
console.log("Not Processing, Queue for Processing");
// Queue for Processing
fs.appendFile(fileProcessing, site, function(err) {
if (err) throw err;
console.log('The "data to append" was appended to file!');
});
}
});
}
});
}
成功完成后不执行进一步的操作,则必须对此进行不同的编码。
这是一种方法:
checkSite()
注意:您无法直接从fs.readFile()
返回成功或失败结果,因为checkSite()
操作是异步的,因此checkSite()
在这些操作完成之前返回。如果您想将结果传回给{{1}}的调用者,那么您将需要传入一个使用结果调用的回调函数,使用promises的结构来帮助您或者切换到同步函数而不是异步版本(通常不推荐)。