Node.js NodeJS与并行流
我是新来的NodeJS。一个让我困惑的问题是平行流。我阅读了一个示例,其中显示了此代码段作为控制并行流的一种技术:Node.js NodeJS与并行流,node.js,Node.js,我是新来的NodeJS。一个让我困惑的问题是平行流。我阅读了一个示例,其中显示了此代码段作为控制并行流的一种技术: var fs = require('fs'); var fileDir = './files'; fs.readdir(filesDir, function (err, files) { if (err) throw err; for (var index in files) { var task = (function (file) {
var fs = require('fs');
var fileDir = './files';
fs.readdir(filesDir, function (err, files) {
if (err) throw err;
for (var index in files) {
var task = (function (file) {
return function () {
fs.readFile(file, function (err, text) {
if (err) throw err;
doSomething();
});
}
})(filesDir + '/' + files[index]);
tasks.push(task);
}
for (var index in tasks) {
tasks[index]();
}
});
这段代码很有魅力,但是当我用
for (var index in files) {
var task = function () {
console.log(files[index]);
fs.readFile(filesDir + '/' + files[index], function (err, text) {
if (err) throw err;
doSomething();
});
};
tasks.push(task);
}
for (var index in tasks) {
tasks[index]();
}
它没有像我预期的那样工作,因为循环中的文件[index]总是目录中的最后一个文件。您能解释一下真正的流程是什么吗?简而言之,您创建的函数引用了索引变量(而不是它的值),因此在执行时,索引值是您案例中目录中的最后一个文件
一些链接:其索引引用将指向其最后一个文件。节点js是异步的,它不会等到读取文件操作完成。它将增加索引值
for (var index in files) {
var task = function () {
console.log(files[index]);
fs.readFile(filesDir + '/' + files[index], function (err, text) {
if (err) throw err;
doSomething();
});
};
tasks.push(task);
}
因为第一个代码使用闭包并将当前索引文件传递给函数。它将获取当前索引文件并返回一个函数,该函数将该文件作为输入
现在,返回的函数将并行执行。您的链接非常有用。非常感谢。