Я начал изучать node.js, недавно прочитав Node JS в книге действий. Вероятно, это вопрос новичков, но после чтения нескольких сообщений о функциях обратного вызова и области переменных javascript у меня все еще есть проблема, понимающая идею этого кода в главе 5 книги.Node.js, вызывающий функцию обратного вызова внутри обратного вызова
function loadOrInitializeTaskArray(file, cb) {
fs.exists(file, function(exists) {
var tasks = [];
if (exists) {
fs.readFile(file, 'utf8', function(err, data) {
if (err) throw err;
var data = data.toString();
var tasks = JSON.parse(data || '[]');
cb(tasks);
});
} else {
cb([]);
}
});
}
function listTasks(file) {
loadOrInitializeTaskArray(file, function(tasks) {
for(var i in tasks) {
console.log(tasks[i]);
}
});
}
Он включает в себя три функции обратного вызова, разделенные на две функции. listTasks (..) вызывается первым, и он вызывает loadorInitializeTaskArray (..) позже. Моя проблема начинается здесь, как этот вызов обрабатывает узел? loadOrInitializeTaskArray принимает два аргумента, а второй - это функция обратного вызова, которая не должна принимать какие-либо параметры в соответствии с сигнатурой, но она делает !!
когда cb (..) вызывается в loadorInitializeTaskArray и что это (ту же функцию, которая вызывает вспомогательную функцию)?
«tasks» - это массив, объявленный внутри функции loadOrInitializeTaskArray, как у нас есть доступ к нему в функции listTasks (..)?
Я знаю, что в Javascript область видимости внутри функции определяется и все вложенные функции. Но мне это трудно понять. Так может кто-нибудь объяснить, что здесь происходит? Спасибо
Спасибо, Vishal за то, что вы положили на этот комментарий. Я не понял, что отсутствие врожденного знания Javascript оказывает такое влияние на изучение node.js. Я давно использовал javascript на стороне клиента, и я думал, что все будет в порядке. Можете ли вы отсылать меня к промежуточному/расширенному руководству по JavaScript, особенно по таким темам, как область охвата, закрытие ...? И вы правы, исходя из java-языка, кодирование в узле запутывает именно его асинхронную модель обратного вызова. – Reza
Да, конечно ... Мне нравится эта книга [JavaScript: окончательное руководство] (http://shop.oreilly.com/product/9780596805531.do). Это действительно потрясающий источник как для ядра, так и для javascript на стороне клиента. Чтобы начать работу с узлом, вам просто нужно прочитать основной javascript. – Vishal