2014-09-10 99 views
0

我試圖返回承諾的輸出。但是,我只是得到了實際承諾,而不是價值。返回承諾的輸出

我在做什麼錯?

這裏是我的代碼:

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

    var deferred = $q.defer(); 

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

     }); 
    return deferred.promise; 


} 

...,結果

enter image description here

+0

我不知道你的目標是什麼,但這就是我所期望的......你需要在返回的承諾上調用'then'。當它解決你的回調函數時,將調用你需要的數據(在這種情況下爲'position')。如果您的代碼如您所示,則不必擔心延遲的問題,因爲您可以直接返回由'$ cordovaGeolocation.getCurrentPosition'返回的許諾。 – 2014-09-10 12:37:00

+0

我的目標是不必調用'.then' – 2014-09-10 12:37:52

+0

然後你不應該使用承諾:D – 2014-09-10 12:38:40

回答

0

由於承諾是異步的,你不能直接(同步)得到其數值在調用後承諾回函數。你可以做到這一點

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