【问题标题】:change setTimeout function to make the for loop print in ascending order更改 setTimeout 函数以使 for 循环按升序打印
【发布时间】:2020-10-10 08:23:08
【问题描述】:

function randomNum(){
    let data;
    for(let i=1;i<=10;i++){       
        let time = Math.random()*100;
        setTimeout(()=>console.log(i,time),time)
    }
}
randomNum();

对于每次迭代,程序需要随机停止time,然后应该打印i并继续循环

【问题讨论】:

  • 随机与升序?请添加你想要的。
  • 你想从循环中按升序打印一个随机数吗?
  • 好像是考试,可以用async/await语法吗?
  • 是的,只使用 async 和 await

标签: javascript settimeout


【解决方案1】:

function randomNum() {
  let timeToWait = 0; // here
  for (let i = 1; i <= 10; i++) {
    let time = Math.random() * 100;
    timeToWait += time; // here
    setTimeout(() => {
      console.log(i, time);
    }, timeToWait); // update here. Updated
  }
}
randomNum();

async function randomNum2() {
  for (let i = 1; i <= 10; i++) {
    let time = Math.random() * 100;
    await new Promise((resolve) => {
      setTimeout(() => {
        console.log(i, time);
        resolve();
      }, time);
    })
  }
}

randomNum2();

你必须计算等待下一次的时间。

在这种情况下,在循环的“下一个”时间,需要等待的时间是之前等待的总时间。

使用async/await更新方式。

【讨论】:

  • 谢谢。但是我们可以用 async 和 await 解决这个问题吗
  • @HamsaVardhanDarapureddi 已更新。
猜你喜欢
  • 2021-12-03
  • 2016-06-22
  • 2017-08-26
  • 2011-07-10
  • 2013-02-20
  • 1970-01-01
相关资源
最近更新 更多