为什么 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。
为什么如果你这样做:
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。