Les rappels sont le moyen le plus fondamental de gérer les opérations asynchrones en JavaScript. Un rappel est une fonction transmise comme un argument à une autre fonction, qui est ensuite exécutée une fois l'opération asynchrone terminée. Cette pièce "After" est cruciale car l'opération asynchrone ne bloque pas le fil principal.
Voyons un exemple simple de récupération des données d'une API:
<code class="javascript">function fetchData(url, callback) { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.onload = function() { if (xhr.status >= 200 && xhr.status { if (err) { console.error('Error fetching data:', err); } else { console.log('Data fetched:', data); } });</code>
Dans cet exemple, fetchData
est une fonction asynchrone. La fonction callback
est exécutée une fois les données récupérées (ou une erreur se produit). Le rappel reçoit deux arguments: un objet d'erreur (ou null
en cas de succès) et les données (ou null
si une erreur s'est produite). Ce schéma, bien que fonctionnel, peut conduire à «l'enfer de rappel» avec des rappels profondément imbriqués lorsqu'ils traitent de multiples opérations asynchrones.
Les promesses offrent un moyen plus structuré et plus propre de gérer les opérations asynchrones. Une promesse représente le résultat éventuel d'une opération asynchrone, qui peut être soit une valeur résolue, soit une raison rejetée (erreur).
<code class="javascript">function fetchDataPromise(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.onload = function() { if (xhr.status >= 200 && xhr.status console.log('Data fetched:', data)) .catch(err => console.error('Error fetching data:', err));</code>
Ici, fetchDataPromise
renvoie une promesse. La méthode .then()
gère la valeur résolue (succès) et la méthode .catch()
gère la raison rejetée (erreur). Les promesses rendent le code asynchrone plus facile à lire et à maintenir, en évitant le problème de nidification des rappels.
Async / Await s'appuie sur les promesses, offrant un style plus synchrone pour écrire du code asynchrone. Le mot-clé async
déclare une fonction asynchrone, et le mot-clé await
s'arrête à l'exécution jusqu'à ce qu'une promesse se résout.
<code class="javascript">async function fetchDataAsync(url) { try { const response = await fetch(url); if (!response.ok) { throw new Error(`Request failed with status ${response.status}`); } const data = await response.json(); return data; } catch (err) { console.error('Error fetching data:', err); throw err; // Re-throw the error for handling further up the call stack } } fetchDataAsync('https://api.example.com/data') .then(data => console.log('Data fetched:', data)) .catch(err => console.error('Error handling:', err));</code>
fetchDataAsync
est une fonction asynchrone. await
attend la promesse de fetch
de résoudre avant de continuer. L' try...catch
gère les erreurs potentielles. Async / Await fait du code asynchrone en lecture comme un code synchrone, améliorant considérablement la lisibilité et la maintenabilité.
Les rappels sont l'approche la plus élémentaire, souffrant de «l'enfer de rappel» en raison de structures imbriquées. Les promesses offrent un moyen plus structuré en utilisant .then()
et .catch()
, améliorant la lisibilité. Async / Await s'appuie sur les promesses, fournissant une syntaxe plus propre et synchrone en utilisant async
et await
, améliorant davantage la lisibilité et la maintenabilité. Async / Await ne change pas fondamentalement la façon dont les opérations asynchrones sont traitées; C'est du sucre syntaxique construit sur les promesses. La principale différence réside dans la façon dont le code est écrit et sa lisibilité, et non sur le mécanisme sous-jacent.
.catch()
ou try...catch
Blocks. Les rejets non perdus peuvent entraîner des échecs silencieux.En comprenant ces approches et leurs pièges, vous pouvez écrire un code JavaScript asynchrone efficace, lisible et maintenable.
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!