我想在我的文件系統中操作多個圖像(imagemagick的轉換命令)。圖像的數量將是動態的,但在這個例子中讓我們使用8.這些圖像都不依賴於彼此,所以我不想調用8個同步exec
s(execSync
)。Node.js獲取回調中的Exec參數/命令
當前代碼:
var exec = require('child_process').exec,
outfile = 'finename123',
jsonreturn = [],
done = function(){
//all images done move on.
},
i = 1;
for(; i <= 8; i++){
var angle = (i - 1) * 45,
bg = __dirname + '/../contentRam/pov/mug11-' + angle + '.png',
child = exec('convert ' + bg + ' ' + outfile + i + '.png -compose darken -resize 400x400 -composite png:-', {
encoding: 'binary',
maxBuffer: 5000 * 1024
}, function(error, stdout, stderr){
jsonreturn.push({
src: 'data:image/png;base64,' + new Buffer(stdout, 'binary').toString('base64'),
angle: angle
});
console.log(angle);
if(jsonreturn.length === 8){
done();
}
});
}
正如你可以看到我的基本問題是,angle
永遠是(在這種情況下315)的最後一個,因爲它完成了for
任何回調的運行之前。有沒有什麼方法可以將數值與數據一起傳遞exec
正在返回到回調中,以便我知道哪個文件剛剛完成而沒有使其同步?我已經研究過能夠獲取參數或在回調中使用exec
調用的整個命令,但我沒有運氣。我也研究了imagemagick的convert
命令的額外參數來傳遞額外的數據,也沒有運氣。
我能想到的唯一的另一件事是讓for循環不運行exec
而是寫入一個字符串。因此,從child =
到exec
末尾的所有內容都將是一個字符串。一旦完成,每個字符串exec
的將在回調中具有正確的參數和正確的數據,因爲此時它不是依靠回調之外的i
來查看它在哪個exec
上,回調字面上寫出它需要執行的方式。這意味着將會有(在這種情況下)8個不同的exec
功能與回調,並在所有字符串將是eval
版。我無法手動執行此操作,因爲存在動態數量的圖像(有時是8,其他時間是3)。
這很好,謝謝。 –