javascript - 如何在 for 循环中迭代以下代码?

标签 javascript node.js

我有以下代码,它获取 6 个 URL 之一,删除文件名,创建文件路径,将图像文件保存到磁盘,将其发送到 MongoDB GridFS。唯一改变的是图像大小:32px、64px、128px、256px、512px、1024px。暴力破解的方法就是复制并粘贴这段代码 6 次,你可以想象那会是多么困惑。

如何将此代码放入 for 循环中,其中 32 将更改为 641282565121024 每次循环迭代?

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 expectedTLDR:因为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/

相关文章:

javascript - 确定从字符串到 32 位整数的转换是否会溢出

javascript - 在不知道名称的情况下访问 json 对象内的元素

javascript - Node.js 与异步 waterfall 模块同步调用

javascript - Node/Express Rest API - 如何从 mssql 抛出错误

node.js - html-webpack-plugin - 如何在不执行 EJS 模板的情况下插入 webpack bundle.js

javascript - 元素的 svg.js 动画旋转给出了意想不到的结果(可见 "jiggling")

javascript - 按属性在对象数组中查找重复项的最短方法

javascript - UserApp 用户搜索不返回任何结果

javascript - 在服务器端实现 Paper.js 螺旋光栅示例

node.js - 如何读取 csv 文件并将其存储在对象数组中?