我遇到了一个演示文稿(幻灯片 50-51),其中作者给出了一个示例,说明如何在 Node.js 中批处理 10000 个相同文件读取的回调。
// 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
?
我错过了一些非常明显的东西吗?如果是这样,请温柔并为我指出。