Méthode 1 : Pas de problème
(async function () {
for (let i = 0; i < triggerArr.length; ++i) {
await sleep();
triggerArr[i]();
}
})();
Méthode 2 : Ils sont sortis ensemble, pourquoi ? (Pas d'attente)
const test = async function (item) {
await sleep();
item();
};
triggerArr.forEach(test);
Tous les codes
function signalLamp(singalArr) {
function tic(sign, delay) {
return () => new Promise((res, rej) => {
setTimeout(() => {
res();
console.log(sign);
}, delay || 1000);
});
}
const rawArr = singalArr.slice();
const triggerArr = rawArr.reduce(function (prev, item) {
return prev.concat([tic(item, 1000)]);
}, []);
const sleep = () => new Promise((res, rej) => setTimeout(res, 1000));
/* Method 1 */
(async function () {
for (let i = 0; i < triggerArr.length; ++i) {
await sleep();
triggerArr[i]();
}
})();
/* Method 2 */
// const test = async function (item) {
// await sleep();
// item();
// };
// triggerArr.forEach(test);
}
signalLamp(['red', 'green', 'yellow']);
Laissez-moi vous le dire.
.await ne peut être utilisé que dans le contexte de fonction d'une déclaration asynchrone Comme indiqué ci-dessous, dans forEach, wait ne peut pas être utilisé directement.
En regardant attentivement, j'ai découvert que votre problème est une autre situation.
Si vous réussissez le test en tant que fonction de rappel, la méthode sleep est exécutée de manière synchrone et wait est toujours efficace, mais en même temps. Par conséquent, les fonctions suivantes seront exécutées ensemble après avoir attendu le même temps.
async Lorsque vous effectuez des boucles asynchrones, il est préférable d'utiliser for ... of ... ou Promise.all()