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 :

Inifite loop lors d'un subscribe


Sujet :

Angular

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 22
    Par défaut Inifite loop lors d'un subscribe
    Bonjour

    Je vous explique, j'ai un une liste d'utilisateur que j'alimente et mets à jour lors de chaque connexion sur le serveur. Cette liste est partagé par tous les composants

    Voici le service qui contient la liste :
    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
    export class DataServiceService {
      userDataSource: BehaviorSubject<User[]> = new BehaviorSubject([]);
      userData = this.userDataSource.asObservable();
     
      constructor() { }
     
      addUser(user: User) {
        const currentValue = this.userDataSource.value;
        const updatedValue = [...currentValue, user];
        this.userDataSource.next(updatedValue);
      }
     
      getArrayUser(): Observable<User[]> {
        return this.userData;
      }
     
      updateArrayUser(users: User[]) {
        this.userDataSource.next(Object.assign([], users));
      }
    }
    Mon problème c'est lorsqu'un utilisateur se déconnecte, je souhaite enlever cet utilisateur de la liste. Donc je procède comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          this.dataService.getArrayUser().subscribe(result => {
            let oldUSers = result;
            let newUSers = oldUSers.splice(oldUSers.findIndex(item => item.id == user.id), 1);
            this.dataService.updateArrayUser(newUSers);
          });
    Et là je tombe sur une infinite loop puisque je fais un update dans un subcribe.. Avez vous une idée pour supprimer correctement cet utilisateur depuis son id ?

    Merci

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    dans dataService

    ne pas emettre si il n'y a pas eu de difference

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 22
    Par défaut
    Il y a une différence puisque je retire un utilisateur de la liste.
    Ou alors je n'ai pas compris ce que tu as dis :/

  4. #4
    Membre extrêmement actif
    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
    Par défaut
    la premiere fois il y a une difference
    la prochaine qu'il retourne il n'y en aura pas
    puisque tu emit dans un subscribe , ça s'auto boucle

    sauf erreur

Discussions similaires

  1. [XL-2007] Renvoyer le numéro de la ligne lors d'une loop(for each) dans un dictionnaire
    Par rayba89 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 27/12/2013, 16h33
  2. [VB6] [Install] Que se passe-t-il lors du setup?
    Par petit scarabée dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 28/10/2002, 08h26
  3. Réponses: 5
    Dernier message: 06/08/2002, 20h08
  4. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

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