gpt4 book ai didi

node.js - 让 forEach 里面的 exec 函数一一执行

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:37 24 4
gpt4 key购买 nike

我陷入了 Nodejs 异步问题。我想调整文件夹中图像的大小,resize 是一个可执行的二进制文件。问题是我的 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 );
})
});
});

但是我得到的结果是我的代码的行为是非 block 的,它打印出:

image1 
image2
...
resized image1
resized image2
...

我期望打印输出的行为应该是:

image1
resize image1
image2
resize image2
...

请告诉我哪里错了。任何帮助都会有所不同。

最佳答案

Array.prototype.forEach 将同步执行 JavaScript 代码,而不等待异步函数完成,因此将在等待回调触发之前结束每个循环。

假设您了解 async 库,您应该使用 async.series() 方法。它会完全按照您的意愿行事。了解它 here .

关于node.js - 让 forEach 里面的 exec 函数一一执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43365251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com