Асинхронный JavaScript Контрольный вопрос с setTimeout и воссозданием forEach - PullRequest
0 голосов
/ 27 мая 2020

Пожалуйста, помогите! Я пытался решить эту проблему самостоятельно, но продолжаю упираться в стену.

Воссоздать метод встроенного массива forEach - напишите функцию, которая принимает в качестве параметров массив, arr и функция обратного вызова, cb. Функция forEach будет выполнять итерацию по arr, передавая каждый элемент и его индекс в качестве аргументов в cb. Создайте переменную с именем delay и присвойте ей массив с числами 200, 500, 0 и 350 (в указанном порядке). Напишите функцию delayLog, которая принимает в качестве входных данных значение delayTime и индекс i. При вызове функция должна ждать миллисекунды delayTime перед тем, как войти в консоль, «печатающий элемент i» (где «i» заменяется фактическим переданным индексом). Собрав все это вместе, запустите функцию delayLog для каждого элемента массива задержек, используя созданную вами функцию forEach.

Это то, что у меня есть. Не слишком уверен, где применить setTimeout. Спасибо !!!

function forEach(array,cb){
  for(let i=0;i<array.length;i++){
    console.log("printing element",i)
  }
}

let delays=[200,500,0,350];

function delayLog(delayTime,cb){
setTimeout(forEach(delayTime),cb);
}

delayLog(delays,i=>i)

С КОНСОЛИ:

printing element 0
app.js:330 printing element 1
app.js:330 printing element 2
app.js:330 printing element 3

1 Ответ

1 голос
/ 27 мая 2020

Вот что вы хотите:

function forEach(arr, cb){
  for(let i=0,l=arr.length; i<l; i++){
    setTimeout(()=>{
      cb(i);
    }, arr[i]);
  }
}
function delayLog(i){
  console.log('printing element '+i);
}
forEach([200, 500, 0, 350], delayLog);
...