gpt4 book ai didi

javascript - 异步函数上的setTimeout

转载 作者:数据小太阳 更新时间:2023-10-29 04:59:27 26 4
gpt4 key购买 nike

我有一个异步函数,我希望它在被触发之前有 5000 毫秒的延迟。我正在尝试使用 setTimeout() 来实现这一点。这个async函数出现在一个循环运行多次,每次async函数传递不同的数据,所以这里不能使用setInterval()

问题: 异步函数立即被触发,没有任何延迟(控制台立即打印 5 条 Done 消息,并且没有任何延迟地循环。发生了什么,我该如何解决?

Javascript 代码

someFunction(listings, function() {
for (var i in listings ) {
var listing = listings[i];
setTimeout(asyncFunction(listing, function(data) {
console.log('Done');
}), 5000);
}
});

最佳答案

您必须将函数包装在另一个函数中。目前,您正在调用该函数,并将返回值作为参数传递给 setTimeout。下面的代码将(正确地)传递一个函数给 setTimeout。 5 秒后,函数执行。

由于作用域问题,我不得不添加两个 函数来实现所需的行为。 5 秒后,循环已经结束,listing 变量将等于 listings 中的最后一个元素。

someFunction(listings, function() {
var counter = 0; // Define counter for 5 second-delays between each call
for (var i in listings ) {
var listing = listings[i];
(function(listing){ //Closure function
setTimeout(function(){ //setTimeout function
// Because of the closure, `listing` is unique
asyncFunction(listing, function(a, b) {
console.log('Done');
});
}, 5000 * ++counter); //Increase counter for each loop
})(listing);
}
});

关于javascript - 异步函数上的setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8279035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com