Это связано с тем, что обратный вызов неблокирующий и асинхронный, в будущем вызывается неопределенное время и не выполняется последовательно сверху вниз.
Если вы добавите дополнительное ведение журнала, вы увидите, что произойдет:
var libObj;
console.log("before");
fs.readFile('library.json', 'utf8', function(err, data) {
console.log("callback called");
if (err){
console.log(err);
} else {
libObj = JSON.parse(data);
console.log(libObj);
}
});
console.log("after");
Это приведет к получению этого вывода:
before
after
callback called
your data here
Итак, вы можете увидеть работы назначенияпросто хорошо, это просто происходит после того, как вы пытаетесь использовать переменную.
Обычный способ решить эту проблему - использовать результат fs.readFile()
внутри обратного вызова или вызывать какую-то функцию изнутриэтот обратный вызов.
fs.readFile('library.json', 'utf8', function(err, data) {
if (err){
console.log(err);
} else {
console.log(data);
// use data here
// or call a function and pass it the data here
someFunc(data);
}
});
// don't try to use data here, it's not available yet