Sur la fonction Async dans ES6

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. asyncLa fonction consiste à *remplacer l'astérisque ( ) de la fonction Générateur par asyncle yieldremplacement 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 nextméthode pour s'exécuter, et la méthode appelante est la même que la méthode ordinaire appelant la fonction

Explication: a) asyncindique qu'il existe une opération asynchrone dans la fonction, awaitindiquant 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' awaitobjet Promise derrière toutes les commandes internes exécutera le changement d'état, à moins qu'une returninstruction 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
Copier le code
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
Copier le code

attente de commande : dans des circonstances normales, awaitun objet Promise suit la commande. Sinon, il sera converti en un resolveobjet Promise immédiat

fonction asynchrone f () { 
  return wait 123; 
} 

f (). then (v => console.log (v)) 
// 123

Gestion des erreurs : si l' awaitopé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...catchbloc de code.

Copier le 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); 
  } 
}
Copier le code

Points à retenir :

  • Il vaut mieux mettre la awaitcommande dans le try...catchbloc de code
  • awaitOpé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.
Copier le code
// 写法 一
laissez [foo, bar] = attendre Promise.all ([getFoo (), getBar ()]); 

// 写法 二
laissez fooPromise = getFoo (); 
laissez barPromise = getBar (); 
laissez foo = attendre fooPromise; 
let bar = attendre barPromise;
Copier le code
  • awaitLes commandes ne peuvent être utilisées que dans des asyncfonctions. Si elles sont utilisées dans des fonctions ordinaires, une erreur sera signalée.

Je suppose que tu aimes

Origine www.cnblogs.com/520BigBear/p/12719968.html
conseillé
Classement