2014-09-10 1 views
0

J'essaie de retourner la sortie d'une promesse. Cependant, je reçois juste la promesse réelle, au lieu de la valeur.Retour de la sortie d'une promesse

Qu'est-ce que je fais mal?

Voici mon code:

$rootScope.distance = function(lon1, lat1) { 

    var deferred = $q.defer(); 

    $cordovaGeolocation.getCurrentPosition() 
     .then(function (position) { 
      deferred.resolve(position); 
     }, function(err) { 

     }); 
    return deferred.promise; 


} 

... et le résultat

enter image description here

+0

Je ne suis pas sûr de ce que vous visez, mais c'est ce que j'attendrais ... vous devez appeler 'then' sur la promesse retournée. Quand il sera résolu, votre rappel 'then' sera invoqué avec les données dont vous avez besoin (' position' dans ce cas). Si votre code est tel que vous l'avez montré, vous n'avez pas besoin de vous préoccuper de l'élément 'différé 'car vous pouvez simplement renvoyer la promesse retournée par' $ cordovaGeolocation.getCurrentPosition' directement. –

+0

Je vise à ne pas avoir à appeler le '.then' –

+0

Ensuite, vous ne devriez pas utiliser une promesse: D –

Répondre

0

Comme une promesse est asynchrone, vous ne pouvez pas obtenir directement sa valeur (synchrone) après avoir appelé la promettre la fonction de retour. Vous pouvez le faire

$rootScope.updateDistance = function(lon1, lat1) { 
    $cordovaGeolocation.getCurrentPosition() 
     .then(function (position) { 
      $rootScope.distance = position; 
     }); 
}