nodejs - 函数返回未退出

时间:2015-01-01 23:55:39

标签: node.js return

我有一个执行一系列测试的功能。如果第一次测试失败,则该函数应退出,但它不会:

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"回到那里。我在这里缺少什么?

1 个答案:

答案 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的结构来帮助您或者切换到同步函数而不是异步版本(通常不推荐)。