3 回答
TA贡献1830条经验 获得超3个赞
您可以尝试添加await和 a Promise:
jQuery("#btn_trendyolStocksSYNC").click(async function() {
for(var product in all){
var colors = all[product];
for(var singleColor in colors[0]){
var size = colors[0][singleColor];
for(var index in size){
var singleSize = size[index];
await new Promise(resolve => setTimeout(function (){
console.log('Waited');
resolve();
}, 5000));
}
}
}
});
这只是告诉你的循环停止,只有在 Promise 对象调用它的resolve参数函数时才继续。这样你的延迟应该简单地发生在下一次迭代之前。这是重要的代码:
await new Promise(resolve => setTimeout(function (){
console.log('Waited');
resolve();
}, 5000));
它只是创建一个Promise我们将在超时让 5000 毫秒过去后解决的问题。然后我们告诉我们的循环在继续下一项之前简单地等待该完成。
注意您还需要添加async到您的处理程序函数,因此 javascript 知道此函数可以等待并花费它需要的时间。
TA贡献1876条经验 获得超7个赞
您可以使用 setInterval 和 clearInterval。
var n=0;
var a = setInterval(()=>{
console.log("Waited");
n++; if(n==5){clearInterval(a);}
},5000);
TA贡献1853条经验 获得超6个赞
该setTimeout();函数是异步的,这意味着您的脚本在继续之前不会等待它完成。这就是为什么它有一个回调。
试试这样的:(不是最好的方法)
//delayed loop
var i = 1;
function loop() {
//wait 5 secs
setTimeout(function() {
console.log(i);
if(i>5) {
//cancel
return;
}
loop();
i++;
return;
}, 1000);
if(i>5) {
//cancel function
return;
}
}
//do the loop
loop();
像什么somethinghere说,你可以把setTimeout在if声明。
当然要在循环结束后做一些事情,你需要一个回调函数。
添加回答
举报