为什么fs.readFile以不同的顺序返回?

时间:2016-12-06 21:35:26

标签: javascript node.js asynchronous readfile event-loop

为什么这样做:

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

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

我猜这与节点&#34; async&#34;有关。事件循环,但不确定这是如何工作的。

3 个答案:

答案 0 :(得分:1)

异步fs方法利用libuv的线程池,并且操作系统可以不同地对这些线程的执行进行排序/调度(特别是取决于操作系统使用的调度程序的类型)。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你可以这样做: -

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