2016-08-30 2 views
0

Для моего текущего приложения я получаю список местоположений базы в текущих местоположениях пользователя и домашнем адресе пользователя, поэтому эти два варианта. Я сохраняю их на двух разных деревьях геофонии и хочу запросить их в разное время, но, в конце концов, я хотел бы объединить их вместе. Поэтому мои данные могут выглядеть так. Мой вопрос заключается в том, как объединить два данных после того, как данные будут загружены, я боюсь, что если я сделаю свои действия за пределами готового предложения, все мои данные не будут готовы, но если я положу действие в любой из готовая статья, другая может быть не готова. Спасибо! -currentLocationGeo -user1 -lat: 12,345 -lng: 53,5435 -addressLocationGeo -user1 -lat: 124,544 -lng: 34,54Как я могу запросить два разных геоинформационных запроса базы данных?

     currentLocationGeo.on("key_entered", function (key, location, distance) { 


         }); 

         addressLocationGeo.on("key_entered", function (key, location, distance) { 


         }); 

         currentLocationGeo.on("ready", function() { 

         }); 

         addressLocationGeo.on("ready", function() { 
          //do something to combine the two geo together and make sure everything is loaded. 
        finalGeo.push(eachLocation); 

         }); 

// сделать что-то finalgeo, но я не являюсь конечно, если finalGeo действительно будет готов, не будучи готовым к гео.

ответ

1

Вам нужно использовать обещания здесь. Угловая, имеет значение $q service.

$q.all делает exaccty, что вам нужно, ждет завершения всех обещаний. Но если у вас нет обещаний, вы можете создать 2 отложенных объекта и разрешить их внутри своих готовых обратных вызовов и ждать после этого $ q.all().

var currentLocationdeferred = $q.defer(); 
var addressLocationdeferred = $q.defer(); 

currentLocationGeo.on("key_entered", function (key, location, distance) { 
}); 

addressLocationGeo.on("key_entered", function (key, location, distance) { 
}); 

currentLocationGeo.on("ready", function() { 
    currentLocationdeferred.resolve('any result'); 
}); 

addressLocationGeo.on("ready", function() { 
    addressLocationdeferred.resolve('any result 2'); 
}); 

$q.all([currentLocationdeferred.promise, addressLocationdeferred.promise]).then(function(result){ 
    // result[0] == 'any result' 
    // result[1] == 'any result 2' 
    finalGeo.push(eachLocation); 
}) 
Смежные вопросы