La promesse de ressources AngularJS

J’ai un contrôleur simple qui utilise $ resource:

var Regions = $resource('mocks/regions.json'); $scope.regions = Regions.query(); 

J’utilise ce contrôleur dans une directive (dans la fonction de lien)

 var regions = scope.regions; 

Mais les régions ne sont pas définies. C’est assez logique que l’appel soit asynchrone.

Ma question est comment puis-je faire pour attendre le résultat et les régions soient un tableau avec toutes les données?

 UPDATE : 

Voici la définition de la directive

 app.directive('ngMap', function() { return { ressortingct: 'EA', replace: 'true', scope: { }, template: '
', controller: 'AccordMapCtrl', link: function(scope, element, attrs) { var regions = scope.regions; console.log(regions); for (var region in regions) {} }; });

Si vous souhaitez utiliser une méthode asynchrone, vous devez utiliser la fonction de rappel par $ promise, voici l’exemple:

 var Regions = $resource('mocks/regions.json'); $scope.regions = Regions.query(); $scope.regions.$promise.then(function (result) { $scope.regions = result; }); 

Si vous cherchez à obtenir des promesses lors d’un appel de ressources, vous devez utiliser

Regions.query().$q.then(function(){ .... })

Mise à jour: la syntaxe de la promesse est modifiée dans les versions actuelles qui se lisent

Regions.query().$promise.then(function(){ ..... })

Ceux qui ont baissé les votes ne savent pas ce que c’était et ont d’abord ajouté cette promesse à l’object ressource. J’ai utilisé cette fonctionnalité fin 2012 – oui 2012.

Vous pourriez aussi faire:

 Regions.query({}, function(response) { $scope.regions = response; // Do stuff that depends on $scope.regions here }); 
 /*link*/ $q.when(scope.regions).then(function(result) { console.log(result); }); 
 var Regions = $resource('mocks/regions.json'); $scope.regions = Regions.query().$promise.then(function(response) { return response; });