Rumah > Soal Jawab > teks badan
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']);
淡淡烟草味2017-05-16 13:41:43
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.
let array = [0,1,2,3,4,5];
(async ()=>{
array.forEach(function(item){
console.log(item);
await wait(1000);//这是错误的写法
});
})();
//因await只能用于 async 声明的函数上下文中, 故不能写在forEach内.下面我们来看正确的写法
(async ()=>{
for(let i=0,len=array.length;i<len;i++){
console.log(array[i]);
await wait(1000);
}
})();
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.
巴扎黑2017-05-16 13:41:43
async Apabila melakukan gelung tak segerak, sebaiknya gunakan untuk ... daripada ... atau Promise.all()