Oskar87
@Oskar87
Senior software engineer

Как загрузить коллекцию объектов по средствам ajax запроса в цикле foreach?

Привет, необходимо в цикле получить коллекцию объектов от удаленного сервиса по средствам api. Написал метод в котором цикле делается запрос и складывает в коллекцию то что получил.
Но на деле запросы выполянются асинхронно, и в коллекции вместо объектов Undefined
this.getDataForPlaces = function(addresses){
	var locationDescs = [];
	_.each(addresses, function(address){
		var promise = $.when(getLocationDesc(address)).done(function(data){
                             locationDescs.push(data);
                    });
	})

	return locationDescs;
};



var getLocationDesc = function(address){

			var parameters = [];
            
            var message = {
                'action' : 'http://api.yelp.com/v2/search',
                'method' : 'GET',
                'parameters' : parameters
            };

            OAuth.setTimestampAndNonce(message);
            OAuth.SignatureMethod.sign(message, accessor);

            var parameterMap = OAuth.getParameterMap(message.parameters);
            $.ajax({
                'url' : message.action,
                'cache': true,
                'method':message.method,
                'data' : parameterMap,
                'dataType' : 'jsonp',
                'jsonp' : 'callback',
                'success':function(data){
                	console.log(data);
                        return data;
                }
            });
	};
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
промисы в помощь
this.getDataForPlaces = function(addresses){
   return Promise.all(Array.prototype.map.call(addresses, function(address) {
      return getLocationDesc(address);
   }));
};

function getLocationDesc(address) {
   return new Promise(function(resolve, reject) {
      var parameters = [];
            
            var message = {
                'action' : 'http://api.yelp.com/v2/search',
                'method' : 'GET',
                'parameters' : parameters
            };

            OAuth.setTimestampAndNonce(message);
            OAuth.SignatureMethod.sign(message, accessor);

            var parameterMap = OAuth.getParameterMap(message.parameters);
            $.ajax({
                url : message.action,
                cache : true,
                method : message.method,
                data : parameterMap,
                dataType : 'jsonp',
                jsonp : 'callback',
                success : resolve,
                error : reject
            });
   });
};


Только что-то мне подсказывает, что у Вас в getLocationDesc ошибка, аргумент address никак не используется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы