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

Angular Discussion :

Echainement de méthodes subscribe


Sujet :

Angular

  1. #1
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut Echainement de méthodes subscribe
    Bonjour,
    dans mon projet, je dois sauvegarder différents objets via l'appel à une Api.
    J'ai donc 4 méthodes qui chacune enregistre quelque chose dans ma DB. Les 3 dernières méthodes ont besoin de l'Id créé par la première méthode.

    Je souhaite donc enchainer l'exécution de ces méthodes les unes à la suite des autres mais que chacune attende que la précédente soit terminée.

    Pour l'instant j'ai ceci :
    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
    18
    19
    20
    21
    22
    23
    24
    25
     
    private insertTruck = () => {
    const truck: Truck = {
          name: this.myForm.get('name')?.value,
          commercialMail: this.myForm.get('commercialmail')?.value,
          phone: this.myForm.get('phone')?.value,
          vatnumber: this.myForm.get('vatnumber')?.value,
          description: this.f.description.value
        }
     
        let apiTruck: string = environment.apiAddress + 'Truck/Registration';
        this.repository.create(apiTruck, truck)
          .subscribe(response => {
            this.insertFoodType(<number>(response as Truck).id);
            this.insertTruckOptions(<number>(response as Truck).id);
            this.insertUserAccount(<number>(response as Truck).id);
            $('#successModal').modal();
            this.redirectTo();
          },
            (error => {
              this.errorHandler.handleError(error);
              this.errorMessage = this.errorHandler.errorMessage;
            })
          );
      }
    J'ai fait des recherches sur le net et il semble qu'utiliser un observable pourrait être la solution mais j'ai du mal à mettre cela en place.

    Quelqu'un aurait une idée?
    Merci

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    il existe plusieurs techniques :

    (1)
    les 2 méthodes tu en fait des "promise" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    async fonction bidule() {
      await methode1();  // reste bloqué sur la méthode 1 tant que pas fini
      await methode2(); // reste bloqué sur la méthode 2 tant que pas fini
    }
    (2)

    après on peut utiliser RxJS et en effet transformer les méthodes en observable
    et les méthodes seront utiliser comme un flux

  3. #3
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut
    Hello dukoid,

    j'ai testé opté pour la première solution async ... await et cela fonction.
    Merci pour ton aide et tes conseils.

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    je viens de me rappeler cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Promise.all([promise1, promise2, promise3]).then((values) => {
      console.log(values);
    });

    si les promesses retournes des valeurs, elles seront récupérés dans : values
    et mis dans l'ordre des promesses dans un tableau sinon le tableau est vide.
    // [promise1, promise2, promise3]
    // expected output: Array [3, 42, "foo"]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Méthodes]UML vs MERISE Lequel pour quoi ?
    Par Daniel258 dans le forum Méthodes
    Réponses: 5
    Dernier message: 31/03/2003, 11h49
  2. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10
  3. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

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