Я столкнулся с a presentation (слайд 50-51), где автор дает пример того, как выполнять обратные вызовы из 10000 одинаковых файлов в Node.Переменные популяции и обратные вызовы в node.js
// Batching wrapper around the real FS.readFile
var requestBatches = {};
function batchingReadFile(filename, callback) {
// First check to see if there is already a batch
if (requestBatches.hasOwnProperty(filename)) {
requestBatches[filename].push(callback);
return;
}
// Otherwise start a new one and make a real request
var batch = requestBatches[filename] = [callback];
FS.readFile(filename, onRealRead);
// Flush out the batch on complete
function onRealRead() {
delete requestBatches[filename];
for (var i = 0, l = batch.length; i < l; i++) {
batch[i].apply(null, arguments);
}
}
}
// Request the same resource 10,000 times at once
for (var i = 0; i < 10000; i++) {
batchingReadFile(__filename, onRead);
}
function onRead(err, file) {
if (err) throw err;
}
Как разработчик новичку узла есть одна вещь в этом примере я просто не понимаю, как переменная callbacks
устанавливается на массив, содержащий только одну функцию обратного вызова (var callbacks = requestBatches[filename] = [callback];
), тем не менее, как он может содержать 10000 обратного вызова функции в функции onRead
?
Я понимаю, что функция onRead
ставится в очереди событий и не вызывается, пока функция batchingReadFile
не была названа все 10000 раз, но все-таки, как же закончатся другие функции обратного вызова в callbacks
?
Я пропустил что-то очень очевидное? Если да, будьте осторожны и укажите на меня.
Да, они добавляются в переменную requestBatches, но это «обратные вызовы», которые используются в «onRead». –