Probleme de promise

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous, j’ai un problème de promise que je n’arrive pas à résoudre:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vm.loadent = function (dt){
    ent.query({search: dt.id}).$promise
    .then(function(retour){
        vm.tmp=[];
        angular.forEach(retour, function(data){
            vm.tmp.push(data);
        });
    });
    return vm.tmp;
}
vm.load = function () {
    vm.tmpjson=[];
    load.query().$promise
    .then(function(retour){
        angular.forEach(retour, function(data){
            vm.tmpjson.push(data);
            var test = vm.loadent(data);
            vm.tmpjson.push(test);
        });
    })
    return vm.tmpjson;
};

`

Imaginons que load charge des données de types A et loadent des données de Types B.

J’aimerai que cela me ressorte ABBBB ABBBB.

Malheureusement, et malgré plusieurs modifs; cela me ressort AA BBBBBBBB. Merci d’avance de votre réponse.

+0 -0

Salut,

Tes deux fonctions m’ont l’air fausses. vm.loadent retournera toujours immédiatement vm.tmp sans modifier cette valeur. Par exemple, si vm.tmp est une tableau vide, un appel à vm.loadent retournera forcément la même liste vide, sans la modifier.

Pour faire ce que tu veut faire, il faut que tu corriges ces fonctions en faisant en sorte qu’elles retournent toutes des promises de façon à ce qu’on puisse “attendre” les résultats.

Je t’invite aussi à relire de la documentation sur les promises.

+1 -0

Tout simplement parce que tu n’attends pas que la première promise soit résolue avant de lancer la deuxième. Tes boucles sont faites ainsi…

Utilise .then pour enchaîner tes traitements ;)


motet-a met aussi le doigt sur quelque chose, puisqu’effectivement ta méthode loadent ne retourne pas de promesse. Elle ne retourne d’ailleurs pas grand chose…

J’ai ainsi modifier le code de manière à être sur d’avoir un retour :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
vm.loadent = function (dt){
    ent.query({search: dt.id}).$promise
    .then(function(retour){
        vm.tmp=[];
        angular.forEach(retour, function(data){
            vm.tmp.push(data);
        });
    })
    .then(function(){
    return vm.tmp;
    });
}
vm.load = function () {
    vm.tmpjson=[];
    load.query().$promise
    .then(function(retour){
        angular.forEach(retour, function(data){
            vm.tmpjson.push(data);
            var test = vm.loadent(data);
            vm.tmpjson.push(test);
        });
    })
    .then(function(){
    return vm.tmpjson;
    });

Mais maintenant, plus rien ne s’affiche(pas d’erreur, juste des undefined dans mon json). Quand vous parlez de retourner un promise, il s’agit d’en créer un pour la fonction?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte