在js中,是没有睡眠这个概率的。
因为js语句是自上而下执行的,这样语句一触发,就会接着往小执行其他的代码,不会等着语句执行完毕。
所有,你这里需要的这个"睡眠",就算存在,那也只是延迟了for循环里面的代码的"执行",并不会延迟for本身的执行,我这里说的"延迟了for循环里面的代码的执行",是for循环内部的语句,一次性执行for所循环的次数次(这里可能有点难明白,比如for执行10次,延迟3秒,那for里面的代码会在延迟3秒后,一次性执行10次)。
如果要达到这个要求,就需要模拟"睡眠",使用定时器(setInterval)或者延时器(setTimeout):
//lst:需要循环的集合,timer:需要延迟的时间(单位:S)function for_Interva(lst,timer){
var index=0
var Intertimer=setInterval(function(){
//操作集合中第lst[index]个
//集合小标+1
index+=1
//判断index是否达到集合最后一个
if(index>=lst.length){
//如果达到了,就清除定时器,停止循环
clearInterval(Intertimer)
}
},timer)
}
function for_ITimeout(lst,timer){
var index=0
function timeoutfor(){
//操作集合中第lst[index]个
//集合小标+1
index+=1
//判断index是否达到集合最后一个
if(index<lst.length){
//没有达标,就继续循环。达标后,不会进入此if
Timeout(function(){
timeoutfor()
},timer)
}
}
Timeout(function(){
timeoutfor()
},timer)
}
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()
可以使用sleep()方法。
sleep()方法拥有一个参数,它控制睡眠的长短,以毫秒计算。sleep()方法会抛出InterruptedException,所以一定在try-catch块里面使用它。
示例代码如下:
public class A implements Runnable{int i = 0
public static void main(String[] args){
A a1 = new A()
A a2 = new A()
a1.run()
a2.run()
}
public void run(){
while(++i <= 100){
System.out.println(i)
try{
Thread.sleep(50)
}catch(Exception e){
e.printStackTrace()
}
}
}
}
注意,sleep()方法并不保证线程醒来后进入运行,只能保证它进入就绪状态。