IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Chaine de promise et synchronisation


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Par défaut Chaine de promise et synchronisation
    Bonjour à tous,

    J'ai 3 fonctions différentes (f1,f2 et f3) qui me renvoie chacune une promise.
    j'aurrais besoin du resultat de f1 dans f2 puis du résultat de f2 dans f3 avec des fonction de traitement à chaque fois. J'ai essayé dans une fonction f4 de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var f4=function(){
    f1.then(function(dataf1){
      f2.then(function(dataf2){
        f3.then(function(dataf3){
          $scope.contenuedataf2=dataf2;
          traitement(dataf1,dataf2,dataf3); // iici il bug il me dit que dataf2 "is undefine" alors que $scope?contenuedataf2 s'affiche 
          // et contient ce qu'il faut
     
        },function(dataf3){
     
        })
      },function(dataf2){})
    },function(dataf1){
      console.log("f1 echec")
    une autre solution aurrait pu etre d'utiliser $q.all et de récupérer le retour de mes 3 fonctions puis d'effectuer le traitement ensuite

    j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $q.all(f1,f2,f3).then(
            function(TableOfAllData){
              console.log("Dans success recup All");
              $scope.tableau=TableOfAllData;
            },
            function(TableOfAllData){
              console.log("echec success All"+TableOfAllData);
              $scope.present=TableOfAllData;
            }
          )
    le code ci dessous m'affiche Dans success recup All dans la console
    mais $scope.tableau est vide ce qui n'est pas normal
    et je n'ai jamais eu de echec success All mais j'ai l'impression que sa ne fonctionne pas
    j'ai bien ajouté $q dans les dépendance de mon controlleur
    et "prise individuellement" elle renvoie bien un résultat correct
    Merci d'avoir pris le temps de me lire
    Votre aide est la bienvenue

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Par défaut
    Bonjour Marco46,

    Tout d'abord merci de venir une fois encore m'aider !
    J'avoue que j'ai du mal avec Angular malgrès la documentation.

    J'ai déjà lu les liens que tu me proposes et justement pour les promesses imbriquées. Je n'ai pas compris,
    on ferait des then successif et le contenue de la fonction de callback du then n'est execut qu'une fois la promesse d'avant résolue ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    f1.then(function(dataf1){
      f2.then(function(dataf2){
        f3.then(function(dataf3){
          $scope.contenuedataf2=dataf2;
          traitement(dataf1,dataf2,dataf3);  //le commentaire
     
        },function(dataf3){
     
        })
      },function(dataf2){})
    },function(dataf1){
      console.log("f1 echec")
    }
    Dans l'exemple ci dessous, //le comentaire, on "attend" que f1 f2 et f3 soit résolus pour exécuter le traitement ?

    Autre question de base (j'ai vraiment du mal), j'ai l'impression qu'à chaque appui sur un bouton de ma vue, en plus d'executer la fonction associée par ng-click, il réexecute la fonction du controleur. Or, je pensais qu'elle ne s'execute qu'une fois au chargement du state. Cette affirmation est elle vraie sinon comment éviter quelle soit executée à chaque fois (je suis sur une tablette android). Merci à toi.

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par Cludo Voir le message
    Dans l'exemple ci dessous, //le comentaire, on "attend" que f1 f2 et f3 soit résolus pour exécuter le traitement ?
    On attend pas, c'est exécuté quand la dernière promesse est résolue.

    Un exemple qui sera peut être plus parlant pour comprendre le mécanisme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
            function resoudreEtRetournerUnePromise() {
                var deferred = $q.defer(); // création de la promise à retourner
     
                blablablaService
                    .fonction(arg1, arg2)
                    .then(function (res) { // on résout la promise retournée par la fonction
                        var data = res;  
                        // traitements ....
                        deferred.resolve(data); // ces data seront passées dans la résolution de la promise de 
                    }) // la fonction resoudreEtRetournerUnePromise()
                    .catch(function(e) {
                        deferred.reject(e);
                    });
     
                return deferred.promise; // on retourne la promise
            }
    Citation Envoyé par Cludo Voir le message
    Autre question de base (j'ai vraiment du mal), j'ai l'impression qu'à chaque appui sur un bouton de ma vue, en plus d'executer la fonction associée par ng-click, il réexecute la fonction du controleur. Or, je pensais qu'elle ne s'execute qu'une fois au chargement du state. Cette affirmation est elle vraie sinon comment éviter quelle soit executée à chaque fois (je suis sur une tablette android). Merci à toi.
    Le contrôleur d'une vue c'est le constructeur du scope de cette vue. Il n'est donc exécuté qu'une seule fois.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Par défaut
    Bonjour Marco46

    Merci pour l'ensemble de tes réponses

Discussions similaires

  1. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  2. Réponses: 2
    Dernier message: 10/07/2002, 11h51
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Réponses: 3
    Dernier message: 12/06/2002, 21h15
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo