• [^] # Re: Tu tiens pas tes promesses

    Posté par (site web personnel) . En réponse au journal recherche-totoz en JavaScript. Évalué à 4.

    Je ne comprends pas. async, si j'en crois NDM, s'applique uniquement aux fonctions.

    Oui, je me suis relu et il manquait clairement quelque chose ; mon commentaire était à sous-entendre dans le contexte d'une fonction asynchrone qui comporte les promesses ou les await.

    Dans le cas des promesses, notre fonction F va déclarer autant de fonctions (le plus souvent courtes et anonymes) qu'il y a d'étages dans la promise chain.
    Dans le cas des async/await, le code habituellement déclaré dans les fonctions courtes et anonymes se retrouvent juste comme autant d'instructions dans la fonction F.

    Ca ne change rien au fait que ta remarque est judicieuse (je suis fan d'Elixir et Elm donc je comprends ce que tu veux dire), même si je pense que dans le cadre d'une utilisation raisonnable d'async/await en JavaScript, ça ne pose pas de problèmes particuliers.

    Voici le genre de code sous forme de promesses traditionnelles qu'on retrouvait fréquemment dans notre codebase au boulot :

    function f() {
     return asyncFunc1()
     .then(res1 => {
     (...) // code synchrone qui déclare une variable res2, la calcul, et qui a besoin de transmettre res1 à l'étage suivant
     return [res1, res2];
     })
     .then(([res1, res2] => asyncFunc2(res1, res2))
     .then(res3 => {
     (...) // code synchrone qui fait un calcul depuis res3 et le retourne
     })
     .catch(err => {
     console.error(err);
     });
    }

    Voici ce que le même code devient avec async/await :

    async function f() {
     try {
     const res1 = await asyncFunc1();
     (...) // code synchrone qui déclare une variable res2, la calcule
     const res3 = await asyncFunc2(res1, res2);
     (...) // code synchrone qui fait un calcul depuis res3 et le retourne
     catch (err) {
     console.error(err);
     }
    }

    Franchement, je préfère la deuxième version.
    Maintenant, avec une fonction d'une complexité cyclomatique de ouf, des await noyés dans la masse, je dis pas...