javascript - problèmes async/await et forEach
PHP中文网
PHP中文网 2017-05-16 13:39:43
0
2
515

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中文网

认证0级讲师

répondre à tous(2)
淡淡烟草味

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.

巴扎黑

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal