1

以下に、school[key] = value のような配列の school を示します。

for(key in schools) {
        geocoder = new google.maps.Geocoder();
        var address = schools[key];
        var org_code = key;
        geocoder.geocode({ 'address': address}, function(results, status) {
             //callback function
        })
}

コールバック関数内で key/org_code を使用する必要がありますが、明らかに for ループはジオコード API 呼び出しが完了するよりも速く反復するため、コールバック関数で不適切なキーが使用されます。

array.shift を使用して上記を関数として書き直し、その関数をコールバックで使用しようとしましたが、できませんでした... 1つには、その方法でキーにアクセスできませんでした。

4

4 に答える 4

6

クロージャーを使用できます:

for(key in schools) {
    (function(key) {
        geocoder = new google.maps.Geocoder();
        var address = schools[key];
        var org_code = key;
        geocoder.geocode({ 'address': address}, function(results, status) {
            //callback function
        })
    })(key)
}
于 2013-11-14T14:39:26.440 に答える
0

クロージャを使用した別の提案:

for(key in schools) {
    geocoder = new google.maps.Geocoder();
    var address = schools[key];
    var org_code = key;
    geocoder.geocode({ 'address': address }, function(org_code, address) {
        return function (results, status) {
            // use address and org_code here
        };
    }(org_code, address))
}
于 2013-11-14T14:44:55.490 に答える