为什么 fs.readFile return 的顺序不同?

Why does fs.readFile return in different orders?

为什么如果你这样做:

for (var i = 0; i < 5; i++) {
    fs.readFile('file' + i, function(err, data) {
      console.log('file: ', data);
    });
}

你每次都得到不同的结果?

我猜它与节点的 "async" 事件循环有关,但不确定它是如何工作的。

这将关闭并获取文件,并在每个文件完成时将数据返回给您的回调。您永远不会知道哪些将首先完成或顺序。如果您需要等待所有 5 个文件,然后再查看异步库:https://www.npmjs.com/package/async.

fs.readFile('file' + i, function(err, data) {
  console.log('file: ', data);
});

异步 fs 方法利用 libuv 的线程池,并且这些线程的执行可以 ordered/scheduled 因操作系统而异(尤其取决于操作系统使用的调度程序类型)。

你可以这样做:-

for (var i = 0; i < 5; i++) {
    // put the statement in try-catch in case some of the files do not exists or
    // you get some other error
    try {
        // to show actual contents of the file instead of a buffer
        console.log(fs.readFileSync('file' + i).toString());
    } catch (error) {
        console.error(error);
    }
}

我建议不要使用它,但如果您必须这样做,那么这是其中一种方法。您应该按照@jordan-s 的建议结帐async.js http://caolan.github.io/async/docs.html#map