Kaedah 1: Tiada masalah
(async function () {
for (let i = 0; i < triggerArr.length; ++i) {
await sleep();
triggerArr[i]();
}
})();
Kaedah 2: Mereka keluaran bersama, kenapa? (Jangan tunggu)
const test = async function (item) {
await sleep();
item();
};
triggerArr.forEach(test);
Semua kod
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']);
Biar saya beritahu anda.
menunggu hanya boleh digunakan dalam konteks fungsi pengisytiharan async Seperti yang ditunjukkan di bawah, dalam forEach, tunggu tidak boleh digunakan secara langsung.
Memerhati dengan teliti, saya dapati masalah anda adalah situasi lain.
Jika anda lulus ujian sebagai fungsi panggil balik, kaedah tidur dilaksanakan secara serentak, dan menunggu masih berkesan, tetapi pada masa yang sama. Oleh itu, fungsi seterusnya akan dilaksanakan bersama-sama selepas menunggu masa yang sama.
async Apabila melakukan gelung tak segerak, sebaiknya gunakan untuk ... daripada ... atau Promise.all()