js 中的睡眠函数

JavaScript014

js 中的睡眠函数,第1张

let array = [[{'level':"赛程表1",'time':3000},{'level':"对阵图1",'time':8000},{'level':"小组积分赛1",'time':10000}],[{'level':"赛程表2",'time':5000},{'level':"对阵图2",'time':8000},{'level':"小组积分赛2",'time':10000}],[{'level':"赛程表3",'time':5000},{'level':"对阵图3",'time':6000},{'level':"小组积分赛3",'time':9000}]]

async function sleep(time) {

  await new Promise((resolve,reject)=>{

     setTimeout(() => {

      //  console.log(`等了${time}s`)

       resolve()

     }, time)

  })

}

async function doSome(params) {

  for (let x = 0 x < array.length x++) {

    const eleArr = array[x]

    for (let y = 0 y < eleArr.length y++) {

      const ele = eleArr[y]

      console.log(ele.level)

      await sleep(ele.time)

      if (x>=array.length-1 && y>=eleArr.length-1) {

        doSome()

      }

    }

  }

}

doSome()

1. jquery的$.delay()方法

设置一个延时来推迟执行队列中之后的项目。这个方法不能取代JS原生的setTimeout。

The .delay() method is best for delaying between queued jQuery effects. Because it is limited—it doesn't, for example, offer a way to cancel the delay—.delay() is not a replacement for JavaScript's native setTimeout function, which may be more appropriate for certain use cases.

例子:在.slideUp() 和 .fadeIn()之间延时800毫秒。

HTML 代码:

<div id="foo /">

jQuery 代码:

$('#foo').slideUp(300).delay(800).fadeIn(400)

2. 通过循环消耗cpu

function sleep(n) {

var start = new Date().getTime()

while(true) if(new Date().getTime()-start >n) break

}

3. 用setTimeout。

假设有三个步骤,步骤之间需要暂停一段时间;可以采用如下的方法:

function firstStep() {

//do something

setTimeout("secondStep()", 1000)

}

function secondStep() {

//do something

setTimeout("thirdStep()", 1000)

}

function thirdStep() {

//do something

}

你戳到js的痛处了

最开始设计时候就是单线程的

即时用setTimeout 模拟

也只是将代码片插入主线程里 然后间隔一个时间片自动触发执行

就像埋个定时boom 而不是sleep这种高级遥控boom

所以一般都是用:

setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。

语法

setTimeout(code,millisec)

参数

描述

code必需。要调用的函数后要执行的 JavaScript 代码串。

millisec必需。在执行代码前需等待的毫秒数。

setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。