对每个对象执行HTTP POST请求的forEach循环问题

时间:2017-03-12 00:43:28

标签: javascript arrays node.js asynchronous

我正在使用npm请求模块对API执行超级基本POST请求以上传图片网址并为网址数组中的每个对象获取新的网址链接。一旦我拥有它们,我会将它们推回到我的阵列中。

我似乎无法做到这一点。当我通过常规字符串执行它时,我可以正常工作,但是当我尝试在数组上循环http POST请求时,我无法返回它。

我有一个数组,例如:

var product = {
      extra_images:
        [ 'https://some.imgcdn.com/myimage1.jpg',
        'https://some.imgcdn.com/myimage2.jpg',
        'https://some.imgcdn.com/myimage3.jpg' ]
    }

product.extra_images.forEach(function(originURL, index){
          urlCloaker(originURL, extraImgResponse);
        });

以下是执行API请求的函数:

function urlCloaker(imgUrl, cloakedURLResponse){

  var imgUrl = 'upload=' + imgUrl;

  request('http://coolsite.com/api?' + imgUrl, function (error, response, body) {
      if(error){
        return console.log('Error:', error);
      }

      if(response.statusCode !== 200){
        return console.log('Invalid Status Code Returned:', response.statusCode);
      }
      else {
        var JSON_result = JSON.parse(body);
        cloakedURLResponse(error, JSON_result.data.img_url);
      }
  });
}

这是我的回调:

 function extraImgResponse(err, data){
      if(err)
        console.log("ERROR: " , err);
      else {
        product.extra_images.push(data);
      }

    }

1 个答案:

答案 0 :(得分:0)

我能够通过创建一个单独的数组来比较我正在循环执行异步请求的数组的长度来解决这个问题。当新数组与我循环的数组的长度相同时,我能够存储数据。谢谢你的帮助!