javascript - async/await dan untuk setiap isu
PHP中文网
PHP中文网 2017-05-16 13:39:43
0
2
516

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']);
PHP中文网
PHP中文网

认证0级讲师

membalas semua(2)
淡淡烟草味

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.

巴扎黑

async Apabila melakukan gelung tak segerak, sebaiknya gunakan untuk ... daripada ... atau Promise.all()

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan