Adresse réimprimée: https://www.cnblogs.com/sghy/p/7987640.html
Définition : La fonction Async est une fonction d'opération asynchrone. En substance, la fonction Async est le sucre syntaxique de la fonction Generator. async
La fonction consiste à *
remplacer l'astérisque ( ) de la fonction Générateur par async
le yield
remplacement await
, et rien de plus.
Méthode de définition et méthode d'appel :
test de fonction asynchrone () { const a = attendre fn1 (); const b = attendre fn2 (a); } test ()
Cela peut être vu à partir de ce qui précède: la fonction asynchrone n'a pas besoin d'être comme la fonction Generator, elle doit appeler la next
méthode pour s'exécuter, et la méthode appelante est la même que la méthode ordinaire appelant la fonction
Explication: a) async
indique qu'il existe une opération asynchrone dans la fonction, await
indiquant que l'expression qui suit immédiatement doit attendre le résultat
b) La valeur de retour de la fonction asynchrone est Promise
Retournez l'objet promis :
test de fonction asynchrone (a, b) {
const x = add (a, b);
const y = add (1, x);
return y;
}
function add (x, y) {
return x + y;
}
console.log (test (1,2)) // Retourne l'objet de promesse
test (1,2) .then (value => {
console.log (value) // 4 objet de promesse peut utiliser la méthode then () pour obtenir le résultat
})
Changement d'état de l'objet Promise : l' await
objet Promise derrière toutes les commandes internes exécutera le changement d'état, à moins qu'une return
instruction ne soit rencontrée ou qu'une erreur ne soit levée.
- return: l'état passe à en attente et la fonction then est modifiée pour résoudre
fonction asynchrone f () { return 'hello world'; } f (). then (v => console.log (v)) // "bonjour le monde"
- Lancer une erreur: l'état change directement pour rejeter
async f () { wait add (1,2); throw new Error ('Error'); } function add (x, y) {(résoudre, rejeter) => { résoudre (x + y) }} f ( ) .then (v => console.log (v)) .catch (e => console.log (e)) // Si une erreur se produit, l'état de rejet sera capturé par la méthode catch
attente de commande : dans des circonstances normales, await
un objet Promise suit la commande. Sinon, il sera converti en un resolve
objet Promise immédiat
fonction asynchrone f () { return wait 123; } f (). then (v => console.log (v)) // 123
Gestion des erreurs : si l' await
opération asynchrone suivante échoue, elle équivaut async
à l'objet Promise renvoyé par la fonction reject
. Le moyen d'éviter les erreurs consiste à le placer dans un try...catch
bloc de code.
fonction asynchrone main () { try { const val1 = attendre firstStep (); const val2 = attendre secondStep (val1); const val3 = attendre troisième étape (val1, val2); console.log ('Final:', val3); } catch (err) { console.error (err); } }
Points à retenir :
- Il vaut mieux mettre la
await
commande dans letry...catch
bloc de code await
Opérations asynchrones derrière plusieurs commandes, s'il n'y a pas de relation secondaire, il est préférable de les laisser se déclencher en même temps.
// 写法 一 laissez [foo, bar] = attendre Promise.all ([getFoo (), getBar ()]); // 写法 二 laissez fooPromise = getFoo (); laissez barPromise = getBar (); laissez foo = attendre fooPromise; let bar = attendre barPromise;
await
Les commandes ne peuvent être utilisées que dans desasync
fonctions. Si elles sont utilisées dans des fonctions ordinaires, une erreur sera signalée.