J'ai deux fonctions a
et b
sont asynchrones, l'ancien sans await
et, plus tard, avec await
. Ils ont tous les deux journaux de quelque chose de la console et revenir 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.
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')
}
<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
, le message sont inversées comme la fonction est exécutée de manière asynchrone.
Donc ma question est: comment exécuter javascript async
de fonctions de n await
mot-clé est présent?
Véritable cas d'utilisation: j'ai un await
mot-clé qui est conditionnaly 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 en Utilisant asynchrone sans attendre)