Maison >interface Web >js tutoriel >Astuces asynchrones en JavaScript pour un code plus fluide

Astuces asynchrones en JavaScript pour un code plus fluide

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-22 14:28:02511parcourir

Alors que nous naviguons dans le monde de JavaScript, comprendre sa nature asynchrone est essentiel pour créer des applications Web réactives. Bien que les promesses soient un excellent outil, elles ne conviennent souvent pas aux scénarios plus complexes. Dans cet article, nous aborderons les modèles asynchrones avancés qui amélioreront vos compétences JavaScript.

Générateurs et rendement pour le contrôle asynchrone

Les générateurs sont un type spécial de fonction qui vous permet de suspendre l'exécution et de renvoyer des résultats intermédiaires. Cela peut être particulièrement utile pour contrôler les flux asynchrones.

Exemple :

function* asyncGenerator() {
    const data1 = yield fetchData1(); // Pause until data1 is available
    const data2 = yield fetchData2(data1); // Pause until data2 is available
    return processData(data1, data2); // Final processing
}

const generator = asyncGenerator();

async function handleAsync() {
    const result1 = await generator.next(); // Fetch first data
    const result2 = await generator.next(result1.value); // Fetch second data
    const finalResult = await generator.next(result2.value); // Process final result
    console.log(finalResult.value);
}

handleAsync();

Itérateurs asynchrones

Les itérateurs asynchrones permettent de gérer efficacement les flux de données asynchrones, vous permettant de traiter les données dès leur arrivée sans bloquer le thread principal.

Exemple :

async function* fetchAPIData(url) {
    const response = await fetch(url);
    const data = await response.json();

    for (const item of data) {
        yield item; // Yield each item as it arrives
    }
}

async function processAPIData() {
    for await (const item of fetchAPIData('https://api.example.com/data')) {
        console.log(item); // Process each item as it comes
    }
}

processAPIData();

Concurrence avec Promise.allSettled

Promise.allSettled vous permet d'attendre que toutes les promesses soient réglées, quel que soit leur résultat (résolu ou rejeté). Ceci est utile pour les scénarios dans lesquels vous souhaitez effectuer des actions basées sur les résultats de plusieurs opérations asynchrones.

Exemple :

const promise1 = Promise.resolve(1);
const promise2 = Promise.reject(new Error('Failed'));
const promise3 = Promise.resolve(3);

Promise.allSettled([promise1, promise2, promise3]).then((results) => {
    results.forEach((result) => {
        if (result.status === 'fulfilled') {
            console.log('Result:', result.value);
        } else {
            console.error('Error:', result.reason);
        }
    });
});

Travailleurs du Web

Les Web Workers fournissent un moyen d'exécuter JavaScript dans les threads d'arrière-plan, ce qui permet de gérer des tâches gourmandes en CPU sans geler l'interface utilisateur. Ceci est crucial pour maintenir une expérience utilisateur fluide dans vos applications.

Exemple :

// worker.js
self.onmessage = function(e) {
    const result = heavyComputation(e.data); // Perform heavy computation
    self.postMessage(result); // Send the result back to the main thread
};

// main.js
const worker = new Worker('worker.js');

worker.onmessage = function(e) {
    console.log('Result from worker:', e.data);
};

// Start the worker with data
worker.postMessage(inputData);

À la fin

La maîtrise de ces modèles asynchrones avancés vous permettra d'écrire du code JavaScript plus efficace, plus maintenable et plus réactif. En incorporant des générateurs, des itérateurs asynchrones, Promise.allSettled et des Web Workers, vous pouvez améliorer considérablement les performances et l'expérience utilisateur de vos applications. Adoptez ces techniques et regardez vos compétences JavaScript monter en flèche !


Mon site personnel : https://shafayet.zya.me


Un mème pour vous ?

Async Tricks in JavaScript for Smoother Code

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!

Déclaration:
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