В вашем случае вызывается метод fs.readFile()
.Он ждет завершения ввода-вывода.Однако метод checkFeedbackFile()
продолжается до оператора if.Рекомендую использовать fs.stat , чтобы проверить, существует ли файл.И fs.writeFileSync для записи в файл способом синхронизации.
self.checkFeedbackFile = function() {
// attempt to read the file - if it does not exist, create the file
fs.stat('feedback.log', function(err, data){
if(err){
console.log("File doesnt exist, creating a new file");
//Do Something
fs.writeFileSync('feedback.log',data);
}
}
}
Node.js - asycn, если вы входите из C или Java, вы привыкли к этому:
function main(){
1();
2();
3();
}
В C или Java элемент управления переместится на 2()
только после завершения 1()
.Это не относится к Node в зависимости от того, что делает 1()
, если он делает что-то асинхронным образом, скажем, IO, тогда 2()
будет выполнено до завершения 1()
, и, следовательно, вы увидите, что асинхронные методы принимают обратный вызов, который будет выполнен после завершения соответствующей функции.
Рекомендую посмотреть, как работает Nodes Event loop .