Javascript 文件读取回调后打印

Javascript 文件读取回调后打印,javascript,node.js,Javascript,Node.js,读取所有文件后,将最后一个console.log设置为带有----print的 fs.readdir(inputFolder, function(err, list) { list.forEach(function(file){ console.log('# ' + file + ' --> ' + folder); }); }); console.log('---------------------------------------------

读取所有文件后,将最后一个console.log设置为带有----print的

fs.readdir(inputFolder, function(err, list) {
    list.forEach(function(file){
        console.log('# ' + file + ' --> ' + folder);
    });    
});

console.log('--------------------------------------------------------');
forEach
执行同步操作,并且
fs.readdir
是异步的,因此
console.log('---------------------------------------)
将在
fs.readdir
之后立即执行

要在
list
的所有迭代之后打印它,请将日志语句放在
list.forEach
之后,而不是放在
fs.readdir

fs.readdir(inputFolder, function(err, list) {
    list.forEach(function(file){
        console.log('# ' + file + ' --> ' + folder);
    });
    console.log('--------------------------------------------------------      ');   
});
fs.readdir
是异步的。这意味着,即使readdir尚未完成,调用后的代码仍将继续运行。
您可以使用同步运行它,但如果还有其他解决方案,这将是一个错误的选择。在js中总是需要异步,因为这是js快速的原因,因为没有任何东西会阻止代码的执行。

打印完每个文件后,将该行放在readdir回调中可以解决您的问题。

将该行放在
list.forEach
之后,而不是
fs.readdir
之后,虽然每个文件都是回调;(将此作为答案发布。我可以发布它吗,哈哈,只是开玩笑而已,@RayonDabre选择不发布解决方案,而是发布一个相当令人恼火的解释(我也不明白,为什么你会提出异步包?)。所以我解释了为什么他的代码不起作用,并提供了解决方案。你说“在这种情况下”是什么意思这意味着它的默认行为是syncy我想@RayonDabre试图解释的是:readdir是异步的,forEach是同步的。因为forEach是同步的,所以只有在forEach完成后,它才会处理代码。这反过来意味着,您的行应该在readdir内,但在list.forEach之后,以便首先打印文件。顺便说一句:s解决方法就是我发布的答案。不!
forEach
本质上是同步的。我需要更新我的答案!