gpt4 book ai didi

javascript - 查询 : Set delay for each iteration

转载 作者:行者123 更新时间:2023-11-30 09:43:25 25 4
gpt4 key购买 nike

假设这是我想要的逻辑:

// On fail return status = 500, else success will return PDF bytestream
function request() {
return $.ajax({
url: url,
async:false,
// other properties
});
}

$('#action').click(function(e) {

$("#loading").fadeIn("slow"); // display loading

while(true) {
if(request().status != 200) {
delay(3000);
} else { break; }
}

$("#loading").fadeOut("slow"); // hide loading
});

对于没有迭代和请求的测试延迟,此代码运行良好:

    $(document).ready(function(){
$('#action').click(function(e) {
$("#loading").fadeIn("slow");
setTimeout(function() {
$("#loading").fadeOut("slow");
}, 5000);
e.preventDefault();
});
});

当我在里面放一些循环和请求时,问题就开始了,就像这样:

    var isOk;
$(document).ready(function(){
$('#action').click(function(e) {

$("#loading").fadeIn("slow");

while(true) {
request().always(function(jqXHR){
console.log(jqXHR);
if(jqXHR.status == 500) {
isOk = false;
setTimeout(function(){console.log("False")}, 3000);
} else { isOk = true; }
});

if(isOk) {break};
}

$("#loading").fadeOut("slow");
e.preventDefault();
});
});

好像迭代之间没有延迟。加载符号 fadeIn 和 fadeOut 立即。知道如何正确延迟迭代吗?

最佳答案

使用promises (从技术上讲,此示例中的 jQuery Deferred 但概念相同)修复流程,让您省去很多麻烦:

$('#action').click(function(e) {  
$('#loading').fadeIn('slow'); // display loading
$.ajax(url).always(function (e) {
$('#loading').fadeOut('slow'); // hide loading
});
});

请注意,我正在使用 .always()... 这样即使出现错误,我们仍会隐藏加载指示器。您可以为 .fail() 添加另一个处理程序以捕获错误。

更好的是,使用 .show().hide(),并使用 CSS 动画处理任何像这样的淡出样式。虽然在这种情况下不太重要,但它使这些转换在浏览器引擎中得到了极大的优化,脱离了 JavaScript,同时将您的应用程序逻辑与样式进一步分离。

关于javascript - 查询 : Set delay for each iteration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061969/

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