Obwohl ich es geschafft habe, meinen Code funktionieren zu lassen, gibt es etwas, das ich nicht verstehe. Das folgende Stück Code funktioniert richtig:
socket.on('method', function() {
var payload = {
countrycode: '',
device: ''
};
var d1 = $q.defer();
var d2 = $q.defer();
$q.all([
geolocation.getLocation().then(function(position) {
geolocation.getCountryCode(position).then(function(countryCode){
payload.countrycode = countryCode;
d1.resolve(countryCode);
});
return d1.promise;
}),
useragent.getUserAgent().then(function(ua) {
useragent.getIcon(ua).then(function(device) {
payload.device = device;
d2.resolve(device);
});
return d2.promise
})
]).then(function(data){
console.log(data); //displays ['value1', 'value2']
})
});
Gibt es einen besseren Weg, dies zu erreichen? Zuvor hatte ich nur eine verzögerte Variable, d. H. Var var deferred = $q.defer();
, aber auf diese Weise gab die -Funktion ein Objekt mit dem doppelten Ergebnis zurück.
So die wenige Frage, die ich habe, ist:
- Benötige ich mehr
$q.defer
Vars? - Ist der obige Weg der beste Weg, um auf zwei asynchrone Aufrufe zu warten, um das Nutzlastobjekt zu beenden und aufzufüllen?
Das ist eine wirklich gute Antwort +1 – maurycy
Dank Wayne ist - ich eine leichte bearbeitet (console.log (Payload);) – Tamas