【问题标题】:Asynchronous JavaScript Challenge question with setTimeout and recreating forEach带有 setTimeout 和重新创建 forEach 的异步 JavaScript 挑战问题
【发布时间】:2020-05-27 01:33:27
【问题描述】:

请帮忙!我一直在尝试自己解决这个问题,但一直碰壁。

重新创建内置数组方法 forEach - 编写一个函数,将数组 arr 和回调函数 cb 作为参数。 forEach 函数将遍历 arr,将每个元素及其索引作为参数传递给 cb。 创建一个名为 delays 的变量,并为其分配一个编号为 200、500、0 和 350 的数组(按此顺序)。 编写一个函数 delayLog,将 delayTime 和索引 i 作为输入。调用时,该函数应在登录到控制台之前等待 delayTime 毫秒,“打印元素 i”(将“i”替换为传入的实际索引)。 综上所述,使用您创建的 forEach 函数对延迟数组的每个项目运行 delayLog 函数。

这是我目前所拥有的。不太确定在哪里应用 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

【问题讨论】:

    标签: javascript asynchronous foreach settimeout csx


    【解决方案1】:

    这就是你想要的:

    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);

    【讨论】:

    • 这是训练营准备练习。没有老师,也没有人可以问。问题是要求重新创建 forEach 函数而不是使用 forEach 数组方法。感谢您的快速响应
    • 这是完美的。谢谢你的帮助。我会检查你的解决方案以确保我得到它。
    【解决方案2】:
    function forEach(arr, cb){
      for(let i = 0; i < arr.length; i++){
        cb(arr[i], i);
      }
    }
    
     delays = [200, 500, 0, 350];
    
    function delayLog(delayTime, i){
      setTimeout(() => {
        console.log(`printing element ${i}`)
      }, delayTime);
    }
    
    forEach(delays, delayLog);
    

    【讨论】: