for循环中不修改timeout值, 每隔1秒输出

很简单的一个需求, 循环10次, 每隔1秒输出i的值, 伪代码如下

for(let i=0; i<10; i++) {

    setTimeout(function(){

        console.log(i)

    }, 1000)

}

地球人都知道这样会都输出一个值

用闭包可以实现1秒后输出所有值, 但是我想要的是每隔1秒输出一个值(不用改变timeout的时间, 比如:(i+1)*1000, 这种方式)

请问:这个如何实现?

补充一个@李引证的答案, 估计好多同学看的不太懂

  • 这段代码在node里面是运行不通的, 因为需要es7, 可以在浏览器里面运行

  • const sleep = time=>new Promise(resolve=>setTimeout(resolve,time));这段代码简写的很严重, 我改成详版

const sleep = (time) => {

    return new Promise((resolve) => {

        setTimeout(() => {

            resolve()

        }, time)

    })

}

这样看的能清楚些

  • 其实这些sleep函数真的没干么事, 方法如其名, 只是sleep了一段时间

  • 其实await是有返回值的, 返回的是resolve的参数, 不信你试试这段代码

async function test() {

    for (let i = 0; i < 10; i++) {

        let t = await sleep(1000)

        console.log(t, i)

    }

}


繁花不似锦
浏览 854回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript