如果满足某个条件,我想延迟在forEach循环中调用另一个函数,但是在这种情况下我不了解setTimeout。setTimeout for for each循环
function checkName(person) {
console.log('checking name of ' + person.name)
if (person.name === 'Julie') return true
}
function checkPersons() {
var persons = [
{name: 'Bob', age: 21},
{name: 'Frank', age: 15},
{name: 'Julie', age: 12}
]
var results = []
persons.forEach(function(person) {
if (person.age >= 18) {
console.log('do not need to check name of ' + person.name)
results.push(person)
} else {
setTimeout(function() {
if (checkName(person)) {
console.log('Julie is ' + person.name)
results.push(person)
}
}, 5000)
}
})
}
checkPersons()
https://jsfiddle.net/nicholasduffy/sy7qpqu1/1/
我得到
do not need to check name of Bob
// 5 second delay here
checking name of Frank
checking name of Julie
Julie is Julie
我将每一次我需要调用checkName
do not need to check name of Bob
// 5 second delay here
checking name of Frank
// 5 second delay here
checking name of Julie
Julie is Julie
使其5000 *指数 – juvian
JS触发超时功能异步,这意味着循环结束,并且setTimeout的回调在5秒后被调用。循环本身并不等待回调被调用。所以两个回调几乎同时发生。 @juvian的评论是一种解决方法,以获得所需的行为 – martinczerwi
问题是,您的超时时间同时被创建。 setTimeout释放主线程以继续,所以两个呼叫立即发生(几乎)。如果你做什么@juvian说超时的索引时间会更长。 – Liam