recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - problèmes async/await et forEach

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']);
PHP中文网PHP中文网2830 Il y a quelques jours519

répondre à tous(2)je répondrai

  • 淡淡烟草味

    淡淡烟草味2017-05-16 13:41:43

    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.

    .
    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);
      }
    })();

    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.

    répondre
    0
  • 巴扎黑

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

    async Lorsque vous effectuez des boucles asynchrones, il est préférable d'utiliser for ... of ... ou Promise.all()

    répondre
    0
  • Annulerrépondre