2016-08-11 3 views
0

Ich habe eine Funktion, die eine Liste der Lieblingsorte zurückgeben muss. So etwas wie dieses

LocationsFactory.getFavoriteLocations(). Dann (Funktion ($ favoriteLocations) { });

Die getFavoriteLocations sieht so etwas wie dieses wieder

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; 
       } 
      } 

Die GetDeviceID, es ist eine Funktion auf Versprechen basiert.

Der Fehler, den ich bekam, ist TypeError: Kann die Eigenschaft 'then' von undefined nicht lesen. Bitte helfen Sie!

+0

Sie können Versprechen Rückkehr mit 'return $ q.resolve (Keychain.getKey())' – karaxuna

+0

Sie müssen ' return deff.promise; 'in' getFavoriteLocations'. – str

Antwort

0

können Sie Kette verspricht:

 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); 
     } 

und verbessern diese:

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

Verschachtelung Versprechen ist IMO keine sehr gute Praxis –

0

$q nicht notwendig hier:

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 
     }); 
    }) 
} 

Jetzt sollte es funktionieren.

Verwandte Themen