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

NodeJS Discussion :

Parallélisation de taches


Sujet :

NodeJS

  1. #1
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2019
    Messages : 17
    Par défaut Parallélisation de taches
    bonjour, je dispose d’un tableau d’objets js construit comme suis [{link:'https://some_url',text:"..."}].

    je cherche à validé les url afin de :

    1. vérifier que je dispose bien de l’url finale et si nécessaire la mettre a jour,
    2. supprimer du tableau les objets dont l’url finale est sans intérêt (celle dont le status code !=200, principalement).

    pour ce faire j’utilise 2 petites fonctions :

    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
    26
    27
    28
    29
    30
    31
    async function validateURL(array) {
        for (let elm of array) {
            let finalURL = await terminalURL(elm.link);
     
            if (typeof finalURL == 'string') {
                elm.link = finalURL;
            } else {
                array = array.filter(el => el.link != elm.link)
            }
        }
        console.log(array);
        return array;
    }
     
    async function terminalURL(url) {
        return new Promise((resolve, reject) => {
            axios({
                method: 'get',
                url: url,
                responseType: 'stream'
            }).then((response) => {
                if (response.data.responseUrl) {
                    resolve(response.data.responseUrl);
                }
            }).catch(function(error) {
                reject(error.status);
            });
        }).catch((err) => {
            return ('some error');
        });
    }

    ces fonction semble faire le job que j’attend, par contre je ne suis pas sur que mon code soit bien optimiser.

    De plus, de la façon dont j’ai structuré mon code, le traitement des url se fait de manière séquentielle, hors je souhaiterai que ce traitement ce fasse de manière parallèles. je m’explique :
    L’appel à la fonction validateURL fait appel à la fonction terminalURL à qui elle passe l’url a contrôlé en paramètre.
    En retour elle attend (await) de la fonction terminalURL l'url finale et modifie les valeur de l’objet en fonction des résultats.

    ce que je souhaiterai serait que la boucle for...of de la fonction validateURL lance mes différentes requêtes Axios en parallèle sans attendre les résultats de retour.
    Et que d’un autre coté, dés qu’une valeur est disponible, elle déclenche un évènement qui mette mon objet à jour.

    de quel coté dois je cherché ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2020
    Messages : 40
    Par défaut
    Salut, tu peux regarder du côté de Promise.all : https://developer.mozilla.org/en-US/...ts/Promise/all

    Voici ce que ça pourrait donner (j'ai pas tout repris)
    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
    26
    27
    28
    async function validateURL(array) {
      let promises = [];
     
      for (let elm of array) {
        promises.push(terminalURL(elm.link));
      }
      const finalURLs = await Promise.all(promises);
     
      for (let i = 0; i < array.length; i++) {
        array[i].link = finalURLs[i].link;
      }
     
      return array;
    }
     
    async function terminalURL(url) {
      try {
        const response = await axios({
          method: 'get',
          url: url,
          responseType: 'stream',
        });
     
        return response.data.responseUrl;
      } catch (error) {
        return undefined;
      }
    }

Discussions similaires

  1. Paralléliser sur plusieurs serveurs une tache.
    Par ZouBi dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 6
    Dernier message: 29/08/2013, 09h38
  2. [VB6] Gestionnaire des tache de windows 2000 avec VB6
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h21
  3. [VB6] [Système] Barre des taches
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 15h16
  4. desactiver la barre des taches
    Par naili dans le forum C++Builder
    Réponses: 7
    Dernier message: 02/09/2002, 17h57
  5. Obtenir les taches en cours
    Par mlerat22 dans le forum MFC
    Réponses: 3
    Dernier message: 17/06/2002, 12h36

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