我正在使用NodeJS的Jimp模块在我的(大)nodejs脚本中进行一些图像转换,在我的文件名是动态生成的大循环中。
进行jimp图像转换时,写入函数参数的文件名已经改变。因为写入是在回调内(所以另一个线程?),我的循环已经继续处理另一个循环步骤。
以下是一个示例概述:
for (var i = 0; i < 10; ++i) {
var filename = 'test' + i + '.png';
//some script to generate my image : pupperteer screenshot of a webpage
Jimp.read(filename).then(function (image) {
image.greyscale().write(filename);
}).catch(function (err) {
console.error(err);
});
}
在这个例子中,我的脚本以彩色创建文件test1.png,然后我可以查看test2.png,它是test1.png的副本,但是在灰度...然后它被一个名为的新彩色图像覆盖test2.png。
所以我想知道如何解决这个问题? 在多线程中使用它是完全没问题的,那么如何使用“filename”字符串的副本在写入函数的参数中使用它?
此致
亚历
答案 0 :(得分:2)
使用let而不是var
let filename = 'test' + i + '.png';
答案 1 :(得分:0)
您遇到异步问题。我认为您可以创建一个方法并将文件名作为参数发送。例如:
for (var i = 0; i < 10; ++i) {
let filename = 'test' + i + '.png';
//some script to generate my image : pupperteer screenshot of a webpage
_saveImg(filename);
}
function _saveImg(name) {
const filename = name;
Jimp.read(filename).then(function (image) {
image.greyscale().write(filename);
}).catch(function (err) {
console.error(err);
});
}
=)