我有以下代码,它获取 6 个 URL 之一,删除文件名,创建文件路径,将图像文件保存到磁盘,将其发送到 MongoDB GridFS。唯一改变的是图像大小:32px、64px、128px、256px、512px、1024px。暴力破解的方法就是复制并粘贴这段代码 6 次,你可以想象那会是多么困惑。
如何将此代码放入 for 循环中,其中 32 将更改为 64、128、256、512、1024 每次循环迭代?
var filename32 = image32.replace(/^.*[\\\/]/, '');
var filepath32 = path.join(__dirname, filename32);
var writestream32 = gfs.createWriteStream({ filename: filename32 });
var imageStream32 = request(image32).pipe(fs.createWriteStream(filepath32));
imageStream32.on('close', function() {
fs.createReadStream(filepath32).pipe(writestream32);
fs.unlink(filepath32);
});
更新。
好吧,这个问题不可能使用迭代方法来解决。更多信息请点击:node.js: while loop callback not working as expected 。 TLDR:因为node.js和javascript是单线程的。
最佳答案
使用数组?我不确定我是否正确理解你的问题,因为这个解决方案看起来很愚蠢......
// use this array to store file names(urls).
var imagesName = new Array("32.png", "128.png", "256.png", "512.png", "1024.png");
for (var i = 0; i < imagesName.length; i++) {
var filename = imagesName[i].replace(/^.*[\\\/]/, '');
var filepath = path.join(__dirname, filename);
var writestream = gfs.createWriteStream({ filename: filename });
var imageStream = request(imagesName[i]).pipe(fs.createWriteStream(filepath));
imageStream32.on('close', function() {
fs.createReadStream(filepath).pipe(writestream);
fs.unlink(filepath);
});
}
关于javascript - 如何在 for 循环中迭代以下代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099456/