2017-03-12 35 views
0

npmリクエストモジュールを使用して、画像URLをアップロードし、URLの配列内の各オブジェクトの新しいURLリンクを取得するためのAPIに対する超基本POSTリクエストを実行しています。私はそれらを持っていると私はそれらを私の配列に押し戻すだろう。各オブジェクトでHTTP POST要求を実行するforEachループの問題

私はこの作業を行うことはできません。私は通常の文字列を介してそれを実行するときにうまく動作することができますが、私は配列を介して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); 
     } 

    } 
+0

「私はそれを返すことはできません」 - あなたは何を返すことができないのですか?あなたのコードの結果はどうなると思いますか? –

+0

'product.extra_images'は' product.extra_images.forEach(function ...) 'の直後に変更されていると思われます。もちろん、' urlCloaker'は非同期で、すぐには実行できません。 –

+0

extraImgResponse(err 、data)その関数がいつ正確に呼び出されるか、またあなたは約束を使用していますか? – Remario

答えて

0

私は別の配列を作成して、これを解決することができました。これは、非同期のrequeを繰り返しながらループしていた配列の長さを比較することでしたsts。新しい配列がループしていた配列と同じ長さに達すると、データを格納することができました。すべてのあなたの助けをありがとう!