爲了簡單起見,我縮短了node.js應用程序。調試節點JS邏輯
在我的服務器中,我已經複製了一段代碼,試圖弄清楚什麼是錯的。從邏輯上講,它應該工作。
// Subscribed to email service
app.get('/subscribe', function(req, res) {
var emailExist = false;
// Email to add
var from = req.query.from;
// Iterate through file and check to see if the email given exist or not.
var readFile = fs.createReadStream("./Database/Subscription.txt");
var readline = rl.createInterface({
input: readFile,
terminal: false,
});
readline.on('line', function(line) {
if (line == from) {
emailExist = true;
console.log(line + " " + emailExist);
}
});
console.log("hello " + emailExist);
// If email dosn't exist
if (emailExist === false) {
console.log("I am false and need to be created");
fs.appendFile("./Database/Subscription.txt", from + "\n", function(err) {
if (err) {
return console.log(err);
}
console.log(from + " was added to the email subscription.");
});
}
});
如上面的代碼片段所示,它逐行讀取以確定用戶提交的電子郵件是否存在於Subscription.txt中。那麼我實際上有大約7個副本,它將emailExist變量從false更改爲true。但是,它將它設置爲false時調用它的函數。下面是我的控制檯輸出: Console Output
有什麼想法爲什麼發生這種情況?
安裝Chrome。 在您的終端: 'node --inspect --debug --debug-brk path/to/script.js' –
閱讀javascript中的異步回調,特別是涉及readline的地方。您的主線邏輯完成後,您的readline回調會發生。 – DrC