Node.js 让forEach中的exec函数逐个执行
我陷入了nodejs异步的问题中。 我想调整文件夹中图像的大小,Node.js 让forEach中的exec函数逐个执行,node.js,Node.js,我陷入了nodejs异步的问题中。 我想调整文件夹中图像的大小,resize是一个可执行的二进制文件。 问题是我的调整大小不能同时执行多次。因此,我使用Array.prototype.forEach而不是async.forEach来期望每个文件都将被逐个处理 var exec = require('child_process').exec; exec('ls ' + IMAGE_FOLDER, function (error, stdout, stderr) { if (error)
resize
是一个可执行的二进制文件。
问题是我的调整大小
不能同时执行多次。因此,我使用Array.prototype.forEach而不是async.forEach来期望每个文件都将被逐个处理
var exec = require('child_process').exec;
exec('ls ' + IMAGE_FOLDER, function (error, stdout, stderr) {
if (error) {throw error;}
var fileList = stdout.split("\n");
fileList.pop(); //Remove the last element that null
fileList.forEach(function(imageFile, index, array) {
var inFile = IMAGE_FOLDER + imageFile;
console.log(inFile);
exec('resize ' + inFile, function(err, stdout, stderr){
if (err) {
console.log(stderr);
throw err;
}
console.log('resized ' + imageFile );
})
});
});
但是我得到的结果是我的代码的行为是无块的,它打印出来:
image1
image2
...
resized image1
resized image2
...
我希望打印输出的行为应该是:
image1
resize image1
image2
resize image2
...
请告诉我哪里错了。任何帮助都不尽相同。
Array.prototype.forEach
将同步执行javascript代码,而无需等待异步函数完成,因此将在等待回调触发之前结束每个循环
假设您了解
async
库,那么应该使用async.series()
方法。它会完全满足你的要求。阅读相关内容。但如何循环遍历文件夹中的所有文件。async.series()是函数数组或对象所必需的。创建一个数组的方式与上面使用的forEach
类似。在forEach内部,只需按async.series
所需的格式将新函数推送到空数组。之后,只需将该数组馈送到async.series
。我将尝试您的建议。非常感谢!你找到解决办法了吗?如果是,请发布您的答案,我做了替代解决方案,但我认为您可以尝试以下来自Jyotman Singh的建议。如果有效,请留下评论。