2016-10-17 5 views
-1

Передача данных в функции обратного вызова?

var unique_interests = window.facebook_interests.filter((v, i, a) => a.indexOf(v) === i); 
 
var input = map.getCenter(); 
 
var a = input.lat(); 
 
var b = input.lng(); 
 
var latlng = {lat: a, lng: b}; 
 
window.markersGP = []; 
 

 
for(var i=0; i<unique_interests.length; i++) 
 
{ 
 
    var request = { 
 
     location: latlng, 
 
     radius: '500', 
 
     query: unique_interests[i] 
 
    }; 
 
     
 
    console.log(request); 
 
    service = new google.maps.places.PlacesService(map); 
 
    service.textSearch(request, function (results, status){ 
 
     alert(request.query); 
 
    }); 
 
}

Всякий раз, когда функции обратного вызова вызывается, цикл был выполнен полностью, и alert() всегда выводит последнее значение в массиве. Есть ли способ связать данные с вызовом функции?

ответ

0

Вы можете применить IIFE шаблон:

https://en.wikipedia.org/wiki/Immediately-invoked_function_expression

Так код sould быть как:

for(var i=0; i<unique_interests.length; i++){ 
    var request = { 
     location: latlng, 
     radius: '500', 
     query: unique_interests[i] 
    }; 

    console.log(request); 

    (function (req) { 
     var service = new google.maps.places.PlacesService(map); 
     service.textSearch(req, function (results, status){ 
      alert(req.query); 
     }); 
    })(request); 
} 
Смежные вопросы