2016-11-30 9 views
0

Ich habe noch ein Abenteuer mit AngularJs begonnen, aber die Idee der Versprechungen und die Rückkehr asynchron Daten hat mich überfordert.ngResource Return Erfolg Callback Ergebnis von Service

Ich versuche, einfache Datenrückgabe über. Factory-Methode und $ Ressourcen-Service zu erreichen.

Hier ist meine $ resource Service Rückkehr Versprechen

(function() { 
     angular.module('token') 
      .factory('tokenService', ['$resource', 'baseUri', tokenService]); 

     function tokenService($resource, baseUri) { 
      return $resource(baseUri + 'token', {}, { 
       post: { 
        method: 'POST', 
        headers: { 
         'Content-Type': 'application/x-www-form-urlencoded' 
        } 
       } 
      }); 
     } 
    })(); 

ich in einem anderen Dienst diesen Dienst bin mit der sollte Daten zurückgibt.

Aber ich kann nicht erzwingen, Token-Variable zu besitzen tokenService.post() Ergebnis vor der Wiederholung.

+0

Kurze Antwort, können Sie nicht. Ihr authorizationService muss eine Zusage zurückgeben. Es gibt einen Vorschlagsentwurf, um der Sprache ein neues Feature hinzuzufügen, [warten] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await), aber es ist ein Weg weg . – teppic

Antwort

0

Zuerst: injizieren Sie $q in Ihrem authorizationService.

Versuchen Sie folgendes:

authorization: function(user) { 
    return $q(function(resolve, reject) { 
    tokenService.post({}, { 
     grant_type: 'password', 
     username: user.login, 
     password: user.password, 
     client_id: user.clientId 
    }) 
    .$promise 
    .then(function(token) { 
     resolve(token); 
    }) 
    .catch(function(err) { 
     reject(err); 
    }); 
    }); 
} 

Dann in Ihrem Controller, können Sie verwenden:

authorizationService.authorization(user) 
.then(function(token) { 
    // Some code here 
}) 
.catch(function(err) { 
    // Handle error here 
}); 
Verwandte Themen