For循环与setTimeout?
For loop with setTimeout?
我有一个功能可以显示所有对象。
queries = {
"info": {
"query": "SELECT ...",
"id": "10"
},
"info2": {
"query": "INSERT ...",
"id": "12"
},
"infoN": {
"query": "DELETE ...",
"id": "123"
}
}
for (var [key, value] of Object.entries(queries)) {
let name = key;
let query = value.query;
let id = value.id;
console.log(name);
console.log(query);
console.log(id);
//setTimeout(function() { }, 3000);
}
但我需要显示第一个对象,然后在 3 秒后显示另一个对象,依此类推。
我怎样才能用 setTimeout 循环它们?或者类似的东西?
最简单的方法是在每次调用 setTimeout 时使用不同的延迟
let counter = 1
for (...){
setTimeout(function() { }, 3000 * counter++);
}
因为 Object.entries returns 是一个数组,我们也可以在 for 语句中使用 Arrray.entries 来获取迭代计数器。
queries = {
"info": {
"query": "SELECT ..."
},
"info2": {
"query": "INSERT ..."
},
"infoN": {
"query": "DELETE ..."
}
}
for (let [counter, [key, value]] of Object.entries(queries).entries()) {
const delay = (counter + 1) * 1000
setTimeout(() => {
console.log({
counter,
delay,
key,
value
})
}, delay)
}
虽然我认为直接设置 counter
也很容易阅读。
将所有 console.log 语句放在 setTimeout 中。
queries = {
"info": {
"query": "SELECT ...",
"id": "10"
},
"info2": {
"query": "INSERT ...",
"id": "12"
},
"infoN": {
"query": "DELETE ...",
"id": "123"
}
}
var i = 1;
for (var [key, value] of Object.entries(queries)) {
let name = key;
let query = value.query;
let id = value.id;
setTimeout(function(){
console.log(name);
console.log(query);
console.log(id);
}, 3000* i);
i++;
}
我有一个功能可以显示所有对象。
queries = {
"info": {
"query": "SELECT ...",
"id": "10"
},
"info2": {
"query": "INSERT ...",
"id": "12"
},
"infoN": {
"query": "DELETE ...",
"id": "123"
}
}
for (var [key, value] of Object.entries(queries)) {
let name = key;
let query = value.query;
let id = value.id;
console.log(name);
console.log(query);
console.log(id);
//setTimeout(function() { }, 3000);
}
但我需要显示第一个对象,然后在 3 秒后显示另一个对象,依此类推。 我怎样才能用 setTimeout 循环它们?或者类似的东西?
最简单的方法是在每次调用 setTimeout 时使用不同的延迟
let counter = 1
for (...){
setTimeout(function() { }, 3000 * counter++);
}
因为 Object.entries returns 是一个数组,我们也可以在 for 语句中使用 Arrray.entries 来获取迭代计数器。
queries = {
"info": {
"query": "SELECT ..."
},
"info2": {
"query": "INSERT ..."
},
"infoN": {
"query": "DELETE ..."
}
}
for (let [counter, [key, value]] of Object.entries(queries).entries()) {
const delay = (counter + 1) * 1000
setTimeout(() => {
console.log({
counter,
delay,
key,
value
})
}, delay)
}
虽然我认为直接设置 counter
也很容易阅读。
将所有 console.log 语句放在 setTimeout 中。
queries = {
"info": {
"query": "SELECT ...",
"id": "10"
},
"info2": {
"query": "INSERT ...",
"id": "12"
},
"infoN": {
"query": "DELETE ...",
"id": "123"
}
}
var i = 1;
for (var [key, value] of Object.entries(queries)) {
let name = key;
let query = value.query;
let id = value.id;
setTimeout(function(){
console.log(name);
console.log(query);
console.log(id);
}, 3000* i);
i++;
}