0

我遇到了一个演示文稿(幻灯片 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

我错过了一些非常明显的东西吗?如果是这样,请温柔并为我指出。

4

2 回答 2

0

您似乎错过了代码;

if (filename in requestBatches) {
    requestBatches[filename].push(callback);

    return;
}

...这确保了对batchedReadFile具有相同文件名的连续调用将它们的回调添加到从大小 1开始的数组中。

onRead函数执行时,数组包含 1,000 个回调函数。

于 2013-08-24T19:06:46.173 回答
0

对我来说,问题是我错过/忽略/忘记了 javascript 使用指针。这个问题让我走上了正轨: 变量赋值在 JavaScript 中是如何工作的?

于 2013-08-26T06:08:27.340 回答