Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonctions JS qui peut être exécuté plusieurs fois

    12 octobre 2020 à 23:22:15

    Bjr,

    Fonctions JS qui peut être exécuté plusieurs fois en même temps

    On doit mettre asyn ou un truc devant ou on peut laisser normal ?

    • Partager sur Facebook
    • Partager sur Twitter
      13 octobre 2020 à 8:39:49

      Salut,

      Une fonction synchrone ne peux pas être exécuté plusieurs fois simultanément. Simplement transformer cette fonction synchrone en fonction asynchrone au moyen du mot clé 'async' ne suffit pas à réellement rendre la routine (contenue dans cette fonction) asynchronone.

      Tu as deux moyens pour enclencher l'asynchronicité d'une fonction :

      • 1) Tu utilise 'setTimeOut' avec un délai de 0ms comme dans cette exemple :
        const fn = function() {
           const routine = function() {
              // Ta routine qui doit fonctionner de façon asynchrone
           };
           return setTimeOut(routine, 0); // Lance la routine dès que possible de manière asynchrone, et renvoi un identifiant (un int) de ce 'setTimeOut'.
        };
        Avec cette méthode : impossible de contrôler le résultat de ta routine de manière pertinente. Tu peux très bien ajouter le résultat à un array de porter global, mais tu ne sera jamais en mesure de dire si tel ou tel résultat vient de l'exécution n°X de ta fonction ou de l'exécution n°X+1, etc...
      • 2) Tu te sert d'une promesse résolue et de la méthode 'then' :
        const fn = function() {
           const routine = function() {
              // Ta routine...
           };
           return Promise.resolve().then(routine); // 'Promise.resolve()' renvoi une première promesse résolue sans valeur, et 'then' renvoi une seconde promesse avec pour valeur le retour de 'routine'.
        }
        Sur cette exemple si, puisque tu renvoi une promesse, tu peux déterminer le résultat de chaque exécution sans problème, contrairement à l'exemple précédent.
        En revanche, si 'setTimeOut' est compatible avec les navigateurs les plus anciens dont on puisse pensé ; ça n'est pas le cas de 'Promise.resolve()' et des promesses en général.
        Tu peux oublier cette méthode si tu souhaite absolument que ton application soit compatible avec les utilisateurs d'IE.

      -
      Edité par BrainError 13 octobre 2020 à 8:45:44

      • Partager sur Facebook
      • Partager sur Twitter
        13 octobre 2020 à 14:32:02

        Ben enfaite cette fonction je peux la lancé plusieurs fois en simultané sans rien faire de particuler

        https://hatebin.com/yumoacifid

        • Partager sur Facebook
        • Partager sur Twitter
          13 octobre 2020 à 14:56:01

          Mets en résolu.

          Cordialement

          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2020 à 0:00:47

            Domi65 a écrit:

            Mets en résolu.

            Cordialement


            Pourquoi ?
            • Partager sur Facebook
            • Partager sur Twitter
              14 octobre 2020 à 0:41:24

              J'avais cru comprendre que tu n'avais plus de problème, puisque, dis-tu, tu peux lancer ta fonction comme tu le demandais.
              • Partager sur Facebook
              • Partager sur Twitter
                14 octobre 2020 à 10:16:32

                Domi65 a écrit:

                J'avais cru comprendre que tu n'avais plus de problème, puisque, dis-tu, tu peux lancer ta fonction comme tu le demandais.


                Ben du coup j'attends une réponse a ma question ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  14 octobre 2020 à 12:59:57

                  Salut,

                  qu'est-ce que tu entends pas "plusieurs fois en même temps" ?

                  Si tu veux dire par là "en parallèle", techniquement, ça n'arrive jamais avec javascript, mais tu peux "simuler" ce comportement grâce au deux méthodes que je t'ai montré lors de ma première réponse (bien que je doute que tu ais vraiment besoin de ce genre de procéder. Les cas où ils peuvent être utile sont plutôt rare.)

                  Si tu me parle plutôt de récursivité (parce qu'après tout, la récursivité, c'est exécuter "en même temps" la même fonction de manière imbriqué), oui c'est possible, mais les exécutions parentes sont "mises en pause" le temps du résultat des exécutions filles.

                  Dans tout les autres cas imaginables (et en vérité même dans les premiers cas que je décrit, si on s'en tien à la façon qu'a javascript de fonctionner), une fonction n'est jamais exécuter plusieurs fois "en même temps" en javascript. Il y a la mise en place d'un ordre/une organisation d'exécution. En revanche, cet ordre peut-être chamboulé au moyen d'événements par exemple.

                  Mais normalement, le fait de ne pas pouvoir exécuter "plusieurs fois en même temps" la même fonction ne t'empêche pas de l'appeler de manière successive et d'obtenir un résultat semblable.

                  Plus explications (et sans doute des explications plus claires) ici : https://www.fasterize.com/fr/blog/arretons-de-dire-que-javascript-asynchrone-est-non-bloquant/#:~:text=effet%20de%20flickering.-,Async,t%C3%A9l%C3%A9charge%20le%20script%20en%20parall%C3%A8le.

                  Est-ce que ça répond à ta question ?

                  -
                  Edité par BrainError 14 octobre 2020 à 13:01:45

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 octobre 2020 à 13:26:05

                    Quand je clique sur le bouton ça lance la fonction de scanner.

                    Donc si je clique en même temps que le bouton de chaque entreprise ça me fait tourner la fonction en simultané

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 octobre 2020 à 13:32:50

                      Pytchoun a écrit:

                      Quand je clique sur le bouton ça lance la fonction de scanner.

                      Donc si je clique en même temps que le bouton de chaque entreprise ça me fait tourner la fonction en simultané


                      En fait je crois qu'on ne comprends pas le besoin et le problème. Car ce que tu décris n'est pas un problème car c'est le comportement normal. C'est pour ça que personnellement je ne comprends pas.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 octobre 2020 à 17:51:01

                        Donc du coup la fonction peut tourner plusieurs fois en meme temps
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 octobre 2020 à 17:53:59

                          Pytchoun a écrit:

                          Donc du coup la fonction peut tourner plusieurs fois en meme temps


                          Oui !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 octobre 2020 à 0:09:19

                            Bon ben visiblement non car si j'en lance 3 ca répond plus.

                            -
                            Edité par Pytchoun 15 octobre 2020 à 15:49:05

                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 octobre 2020 à 9:54:57

                              quenti77 a écrit:

                              Pytchoun a écrit:

                              Quand je clique sur le bouton ça lance la fonction de scanner.

                              Donc si je clique en même temps que le bouton de chaque entreprise ça me fait tourner la fonction en simultané


                              En fait je crois qu'on ne comprends pas le besoin et le problème. 

                              Quand on te dit qu'on ne comprend pas le besoin et que tu réponds juste "je n'arrive pas à faire la chose que je ne vous ai pas expliqué", c'est impossible de t'aider.

                              Déjà, cliquer sur "plusieurs boutons en même temps" c'est physiquement impossible.

                              Donc OUI, si tu cliques sur un bouton qui fait "lance ma fonction scanner", et si ensuite si tu cliques sur un autre bouton "lance ma fonction scanner", ça va fonctionner.

                              Donc essaye plutôt de nous montrer une capture de ton interface, ou tout simplement ton besoin exact, car pour le moment mes prédécesseurs ont répondu à ta question.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 octobre 2020 à 10:35:23

                                J'ai tous lancé en meme temps a un moment ca bloque plus rien ne sort et les boutons restent activé.

                                Du coup j'ai fais trop de requetes ?

                                https://imgur.com/7LT5Z8s

                                -
                                Edité par Pytchoun 16 octobre 2020 à 10:41:54

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 octobre 2020 à 16:47:25

                                  Bonjour,

                                  Manque de précisions

                                  Afin d'obtenir de l'aide et une solution à votre problème, il est fortement recommandé de présenter clairement l'état actuel du problème en nous fournissant :

                                  • Un descriptif clair et précis du problème
                                  • La tentative actuelle de résolution que vous avez effectué (le code)
                                  • Le résultat attendu et le résultat actuel
                                  • Toutes pistes de recherches pouvant aider à la résolution
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

                                  Fonctions JS qui peut être exécuté plusieurs fois

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown