cari

Rumah  >  Soal Jawab  >  teks badan

javascript - async/await dan untuk setiap isu

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中文网2830 hari yang lalu520

membalas semua(2)saya akan balas

  • 淡淡烟草味

    淡淡烟草味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.

    balas
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:41:43

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

    balas
    0
  • Batalbalas