Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 让forEach中的exec函数逐个执行_Node.js - Fatal编程技术网

Node.js 让forEach中的exec函数逐个执行

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)

我陷入了nodejs异步的问题中。 我想调整文件夹中图像的大小,
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的建议。如果有效,请留下评论。