2017-09-14 6 views
0

私は店舗の配列を持っています。住所やその他のものが格納されています。複数のHTTPリクエストを実行する - クラウドコードを解析する

今、私はこの配列を反復し、lat/lng座標をジオコードしてデータベースに保存します。

以下のコードでは、同じ店舗の2倍または3倍のエントリを取得しています。私はここのスコープで何かを逃していますか?

ありがとうございます!

var promises = []; 

data.forEach(function (element, index) 
{ 
    var addressString = element.plz + " " + element.stadt + "," + element.adresse; 
    var url = encodeURI("https://maps.googleapis.com/maps/api/geocode/json?address=" + 
     addressString); 
    var promise = Parse.Cloud.httpRequest({ 
     method: "GET", 
     url:url 
    }).then(function (http) //SUCCESS 
     { 
      var geocodedObject = new Parse.Object("GeocodedStores"); 
      geocodedObject.set("storeID", element.id); 
      geocodedObject.set("Latitude", http.data.results[0].geometry.location.lat); 
      geocodedObject.set("Longitude", http.data.results[0].geometry.location.lng); 

      return geocodedObject.save(null, { 
       useMasterKey: true 
      }); 
     }, 
     function (http, error) 
     { 
      response.error(error); 
     }); 
    promises.push(promise); 
}); 

return Parse.Promise.when(promises); 

答えて

0

最後に、解決策が見つかりました。スコープに問題があるように見えました。私は、コードを別の関数に置き、返された約束を配列に加えました。

var fn = function(element, geocodedObject) 
{ 
    var addressString = element.plz + " " + element.stadt + "," + element.adresse; 
    var url = encodeURI("https://maps.googleapis.com/maps/api/geocode/json?address=" + 
     addressString); 

    Parse.Cloud.httpRequest({ 
    method: "GET", 
    url: url 
    }).then(function(http) 
    { 

     geocodedObject.set("storeID", element.id); 

     geocodedObject.set("Latitude", http.data.results[0].geometry.location.lat); 
     geocodedObject.set("Longitude", http.data.results[0].geometry.location.lng); 

     geocodedObject.set("address", addressString); 

     return geocodedObject.save(null, { 
      useMasterKey: true 
     }); 

    }); 
} 

var promises = []; 

for (var k = 0;k<data.length;k++) 
{ 
    var geocodedObject = new Parse.Object("GeocodedStores"); 
    promises.push(fn(data[k], geocodedObject)); 
} 



Parse.Promise.when(promises).then(function() { 
    response.success("DONE"); 
}); 
関連する問題