Utilisation de plusieurs setTimeout dans la même fonction asynchrone / réinitialisation de la timer

En essayant de comprendre async / wait, j’ai essayé ce bloc de code qui ne se comportait pas comme prévu

let test = async function () { let result = new Promise((resolve, reject) => { setTimeout(() => resolve('done1'), 2000) }) let result2 = new Promise((resolve, reject) => { setTimeout(() => resolve('done2'), 2500) }) let x1 = await result console.log(x1) let x2 = await result2 console.log(x2) } test() 

Je m’attendais à ce que la console affiche done1 après 2 secondes, puis affiche done2 ​​2,5 secondes après done1. Au lieu de cela, Il a affiché done1 en 2 secondes et done2 ​​0,5 seconde après cela. Pourquoi se comporte-t-il ainsi, puisque j’attends le deuxième setTimeout après avoir affiché le premier?

Lorsque vous créez une new Promise , il commence à exécuter son code. Quand vous avez setTimeout dedans, le minuteur s’en va. Lorsque vous utilisez await avant l’appel Promise , il attend que la promesse soit résolue ou rejetée, puis fonctionne.

Vous devez créer chaque promesse et l’attendre ensuite.

 let test = async function () { let result = new Promise((resolve, reject) => { setTimeout(() => resolve('done1'), 2000); }); let x1 = await result; console.log(x1); let result2 = new Promise((resolve, reject) => { setTimeout(() => resolve('done2'), 2500); }); let x2 = await result2; console.log(x2); } test()