Fonction Async sans attendre en Javascript

J'ai deux fonctions a et b qui sont asynchrones, l'ancien sans await et, plus tard, avec await. Ils ont tous les deux journaux de quelque chose de la console et de retour undefined. Après l'appel, soit de la fonction que j'journal d'un autre message et regarde si le message est écrit avant ou après l'exécution du corps de la fonction.

JS:

function someMath() {
  for (let i = 0; i < 3000000; i++) { Math.sqrt(i**5) }
}

function timeout(n) {
   return new Promise(cb => setTimeout(cb, n))
}

//------------------------------------------------- a (no await)
async function a() {
  someMath()
  console.log('in a (no await)')
}

//---------------------------------------------------- b (await)
async function b() {
  await timeout(100)
  console.log('in b (await)')
}

clear.onclick = console.clear

aButton.onclick = function() {
  a()
  console.log('after a (no await) call')
}

bButton.onclick = function() {
  b()
  console.log('after b (await) call')
}

HTML:

<button id="aButton">test without await</button>
<button id="bButton">test with await</button>
<button id="clear">clear console</button>

Si vous lancez le test sans await la fonction semble fonctionner comme si c'était synchrone. Mais avec await, les messages sont inversé que la fonction est exécutée de manière asynchrone.

Donc ma question est: comment exécuter javascript async fonctions lorsqu'aucune await mot-clé est présent?


Réel de cas d'utilisation: j'ai un await mot-clé qui est conditionnellement exécuté, et j'ai besoin de savoir si la fonction est exécutée de manière synchrone ou non afin de rendre mon élément:

async function initializeComponent(stuff) {
   if (stuff === undefined)
      stuff = await getStuff()
   //initialize

   if (/* context has been blocked */)
       renderComponent() //render again if stuff had to be loaded
}

initializeComponent()
renderComponent()

P. S: le titre a le javascript mot-clé pour éviter la confusion avec les mêmes questions dans d'autres langues (j'.e À l'aide asynchrone sans attendre)

  • Vous avez également besoin de convertir bButton.onclick fonction dans une fonction async et await pour b()pour terminer, afin d'obtenir le journal désiré.
  • Je ne veux pas attendre pour le journal, je veux savoir avec l'aide ou non à l'aide de await mot-clé modifie la fonction synchrone. Et si elle ne le fait pas, peut-être pourquoi mon test est faux. Je vais mettre à jour avec mon vrai cas d'utilisation à la fin, ce sera peut-être plus clair pour vous.
  • Lecture recommandée - medium.com/javascript-in-plain-english/...
InformationsquelleAutor Ulysse BN | 2017-08-09