如何在request.head中使用嵌套循环 - Node JS

时间:2016-10-28 21:39:28

标签: node.js parse-platform request fs

我正在尝试从解析中移动下载图像并将其保存到我的本地。我有这段代码可以帮我完成工作。当只有一个请求时,这种方法很有效,但是当我放入一个循环时,它并不能保持良好状态。

`for(var i = 0; i < 5; i++) {
console.log(i);//to debug
var filename = results_jsonObj[i].imageFile.name;
var uri = results_jsonObj[i].imageFile.url;
request.head(uri, function(err, res, body){
  if (err){
    console.log(err);
    console.log(item);
    return;
  }else {
    console.log(i); //to debug
    var stream = request(uri);
    stream.pipe(
      fs.createWriteStream("images/"+filename)
        .on('error', function(err){
          callback(error, filename);
          stream.read();
          })
      )
  }
});
}`

无论我有什么循环条件,只有一个图像下载到上述目录。

以下是操作

the print logic is shown here

输入来自Json文件,我有节点js程序中包含的请求,fs,parse模块。

有关如何解决此问题的任何帮助?

1 个答案:

答案 0 :(得分:1)

我现在已经修好了。正如评论中所建议的那样,异步帮助我做了这个伎俩。

    for(var i = 0; i < 900; i++) {
    async.forEachOf(results_jsonObj[i], function(value, key, callback){
    var image = {};
          image.key = key;
                image.value = value;
     if(image.key == 'imageFile')
    {
      var filename = image.value.name;
      var uri = image.value.url;
      // console.log(filename, uri);
    }

    request.head(uri, function(err, res, body){
      if (err){
        console.log(err);
        // console.log(item);
        return;
      }else {
        //  console.log(i,res.headers['content-type']); //to debug
        var stream = request(uri);
        stream.pipe(
          fs.createWriteStream("images/"+filename)
            .on('error', function(err){
              callback(error, filename);
              stream.read();
              })
          )
      }
    });
      callback();
    }, function(err){
      if (err) {
            console.log('one of the api failed, the whole thing will fail now');
        }
    });
    }