Maison > interface Web > js tutoriel > The Callback Hell, écriture de JavaScript asynchrone plus propre

The Callback Hell, écriture de JavaScript asynchrone plus propre

Susan Sarandon
Libérer: 2024-10-24 19:35:29
original
582 Les gens l'ont consulté

Si vous travaillez avec JavaScript depuis un certain temps, vous avez probablement rencontré « l'enfer des rappels », ce fouillis de rappels imbriqués qui rend votre code difficile à lire et encore plus difficile à maintenir. Mais voici la bonne nouvelle : avec les bons outils et modèles, vous pouvez éviter complètement l’enfer des rappels et écrire du code asynchrone propre et efficace. Voyons comment.

Promesses : la première étape pour nettoyer le code asynchrone

Les promesses constituent un moyen plus structuré de gérer les opérations asynchrones en JavaScript et aident à éliminer les rappels profondément imbriqués. Au lieu de passer des fonctions comme arguments et de les imbriquer, les promesses vous permettent d'enchaîner des opérations avec les méthodes .then() et .catch(). Cela permet de garder le code linéaire et beaucoup plus facile à suivre.
Exemple :

// Callback hell example:
doSomething(function(result) {
    doSomethingElse(result, function(newResult) {
        doThirdThing(newResult, function(finalResult) {
            console.log(finalResult);
        });
    });
});

// Using Promises:
doSomething()
    .then(result => doSomethingElse(result))
    .then(newResult => doThirdThing(newResult))
    .then(finalResult => console.log(finalResult))
    .catch(error => console.error(error));
Copier après la connexion
Copier après la connexion

Dans cette approche basée sur la promesse, chaque étape suit la précédente de manière claire et linéaire, ce qui facilite le suivi du flux du code et le débogage si nécessaire.

Async/Await : la solution moderne

Bien que les promesses soient idéales pour nettoyer les rappels imbriqués, elles peuvent toujours sembler encombrantes lorsqu'il s'agit de plusieurs actions asynchrones. Entrez async et attendez. Ces fonctionnalités JavaScript modernes vous permettent d'écrire du code asynchrone qui ressemble presque à du code synchrone, améliorant ainsi la lisibilité et la maintenabilité.
Exemple :

async function handleAsyncTasks() {
    try {
        const result = await doSomething();
        const newResult = await doSomethingElse(result);
        const finalResult = await doThirdThing(newResult);
        console.log(finalResult);
    } catch (error) {
        console.error('Error:', error);
    }
}

handleAsyncTasks();
Copier après la connexion
Copier après la connexion

Avec async/await, vous pouvez gérer les promesses d'une manière beaucoup plus intuitive, en particulier pour les développeurs habitués à écrire du code synchrone. Cela élimine le besoin de chaînage .then() et garde votre code simple, de haut en bas.

Divisez les grandes tâches en petites fonctions

Une autre technique puissante pour éviter l'enfer des rappels consiste à décomposer les tâches volumineuses et complexes en fonctions plus petites et réutilisables. Cette approche modulaire améliore non seulement la lisibilité, mais rend également votre code plus facile à déboguer et à maintenir.

Par exemple, si vous avez besoin de récupérer des données à partir d'une API et de les traiter, au lieu de tout écrire dans une seule grande fonction, vous pouvez les décomposer :

Exemple :

async function fetchData() {
    const response = await fetch('https://api.example.com/data');
    return await response.json();
}

async function processData(data) {
    // Process your data here
    return data.map(item => item.name);
}

async function main() {
    try {
        const data = await fetchData();
        const processedData = await processData(data);
        console.log('Processed Data:', processedData);
    } catch (error) {
        console.error('An error occurred:', error);
    }
}

main();
Copier après la connexion

En séparant les préoccupations de récupération et de traitement des données dans leurs propres fonctions, votre code devient beaucoup plus lisible et maintenable.

Gérer les erreurs avec élégance

L'un des défis majeurs du code asynchrone est la gestion des erreurs. Dans une structure de rappel profondément imbriquée, il peut être difficile de détecter et de gérer correctement les erreurs. Avec Promises, vous pouvez enchaîner .catch() à la fin de vos opérations. Cependant, async/await combiné avec des blocs try-catch offre un moyen plus naturel et plus lisible de gérer les erreurs.

Exemple :

async function riskyOperation() {
    try {
        const result = await someAsyncTask();
        console.log('Result:', result);
    } catch (error) {
        console.error('Something went wrong:', error);
    }
}

riskyOperation();
Copier après la connexion

De cette façon, vous pouvez détecter les erreurs dans une partie spécifique de votre code asynchrone, en le gardant clair et gérable, et en vous assurant qu'aucune erreur ne passe inaperçue.

Gestion de plusieurs opérations asynchrones

Parfois, vous devez gérer plusieurs opérations asynchrones simultanément. Bien que Promise.all() soit couramment utilisé, il arrête l'exécution lorsqu'une promesse échoue. Dans de tels cas, Promise.allSettled() vient à la rescousse : il attend que toutes les promesses soient réglées (soit résolues, soit rejetées) et renvoie leurs résultats.

Exemple :

// Callback hell example:
doSomething(function(result) {
    doSomethingElse(result, function(newResult) {
        doThirdThing(newResult, function(finalResult) {
            console.log(finalResult);
        });
    });
});

// Using Promises:
doSomething()
    .then(result => doSomethingElse(result))
    .then(newResult => doThirdThing(newResult))
    .then(finalResult => console.log(finalResult))
    .catch(error => console.error(error));
Copier après la connexion
Copier après la connexion

Utiliser des Web Workers pour le travail lourd

Pour les tâches gourmandes en CPU, comme le traitement d'images ou l'analyse de données, la nature monothread de JavaScript peut provoquer le blocage de votre application. C'est là que les Web Workers brillent : ils vous permettent d'exécuter des tâches en arrière-plan sans bloquer le thread principal, ce qui permet à l'interface utilisateur de rester réactive.

Exemple :

async function handleAsyncTasks() {
    try {
        const result = await doSomething();
        const newResult = await doSomethingElse(result);
        const finalResult = await doThirdThing(newResult);
        console.log(finalResult);
    } catch (error) {
        console.error('Error:', error);
    }
}

handleAsyncTasks();
Copier après la connexion
Copier après la connexion

En confiant des tâches lourdes aux Web Workers, votre thread principal reste libre de gérer les interactions de l'interface utilisateur et d'autres fonctions critiques, garantissant ainsi une expérience utilisateur plus fluide.

En considérant tout cela

Éviter l'enfer des rappels et écrire du JavaScript asynchrone plus propre consiste à rendre votre code plus lisible, maintenable et efficace. Que vous utilisiez Promises, async/await, modularisiez votre code ou exploitiez Web Workers, l'objectif est le même : garder votre code plat et organisé. En faisant cela, vous vous épargnerez non seulement des cauchemars de débogage, mais vous écrirez également du code pour lequel les autres (ou même vous-même !) vous remercieront.


Mon site Web : https://Shafayet.zya.me


Un mème pour vous ?

The Callback Hell, Writing Cleaner Asynchronous JavaScript

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal