2016-08-11 22 views
0

私は好きな場所のリストを返す必要がある関数を持っています。このようなもの

LocationsFactory.getFavoriteLocations()。then(function($ favoriteLocations){ });

getFavoriteLocationsは、それは約束に基づいて機能だが、再びこの

getFavoriteLocations: function() { 
       if (favorite_locations.length == 0) 
       { 
        var deff = $q.defer(); 
        obj.getDeviceId().then(function(device_id) { 
        $http.get('url?token=' + device_id).then(function(response) { 
           favorite_locations = response.data; 
           deff.resolve(favorite_locations); 
           return deff.promise; 
           }) 
        }) 
       } else { 
        return favorite_locations; 
       } 
      } 

getDeviceIdようになります。

私が抱いているエラーは次のとおりです。TypeError:未定義のプロパティ 'then'を読み取ることができません。助けてください!ここでは必要ないで

+0

あなたがリターンの$ q.resolve 'との約束を返すことができます(Keychain.getKeyは())' – karaxuna

+0

あなたは 'に持っていますgetFavoriteLocations'で 'deff.promise;を返します。 – str

答えて

0

あなたはチェーン約束することができます

 getFavoriteLocations: function() { 
      if (favorite_locations.length === 0) { 
       return obj.getDeviceId().then(function (device_id) { 
        return $http.get('url?token=' + device_id).then(function (response) { 
         favorite_locations = response.data; 
         return favorite_locations; 
        }); 
       }); 
      } 

      return $q.resolve(favorite_locations); 
     } 

そして、これを改善:

getDeviceId: function() { 
    return $q.resolve(Keychain.getKey()); 
} 
+2

ネスティングの約束はIMOはあまり良いことではありません –

0

$q

if (favorite_locations.length == 0) 
{ 
    return obj.getDeviceId() // you have to return a promise here 
     .then(function(device_id) { 
      return $http.get('url?token=' + device_id) // you will access the response below 
     }) 
     .then(function(response) { 
      favorite_locations = response.data; 
      return favorite_locations 
     }); 
    }) 
} 

今では動作するはずです。

関連する問題