使用setInterval测试条件和发现时,清除间隔...任何替代方案?

时间:2013-03-04 21:01:06

标签: javascript jquery

我需要的是javascript继续检查条件(类似于while循环)。我这样做是通过执行一个setInterval,如果满足条件,我会清除然后退出的时间间隔,或者如果它已经运行了X次,在我有下面的情况下,我将它设置为100。

我不喜欢这么多,我把它扔在一起因为它有效。我正在检查来自服务器的数据,这很慢。我想要一个替代方案的主要原因是我有一个在启动AJAX调用时运行的加载gif,我会将此代码粘贴到底部以显示。它运行缓慢,所以我相信当javascript在区间内时,它无法渲染gif,因此运动图像就会停止。

任何人都知道做我想要的替代方案吗? 我希望这有道理吗?

function checkCondition(name,action){
    var timesRun = 0;
    var success = false;

        var interval = setInterval(function() {
            timesRun++;
            var container = {};
            container = mapSystem["desktop"];

            if(action === "delete"){
                var isExisting = name in container ;
                if ( !isExisting || (timesRun === 100)) {
                    //break out of this interval
                    clearInterval(interval);
                    renderCheckList();
                    success = true;
                } else {
                    // Update mapNodeData with fresh data
                    updateData('desktop', false); // Just updates data
                }
            }
        }, 2000);
}

// Code that I have to render a loading GIF. Works great but seems 
// to stop during the interval
$('#loading').hide().ajaxStart(function() {
                $(this).show();
             }).ajaxStop(function() {
                $(this).hide();
            });

1 个答案:

答案 0 :(得分:1)

如果您使用.ajax()而不是ajaxStart,则可以设置在操作完成时执行的函数:

来自文档:

  

完成

     

类型:函数(jqXHR jqXHR,String textStatus)

     

一个功能   在请求完成时调用(成功和错误之后)   回调被执行)。该函数传递了两个参数:The   jqXHR(在jQuery 1.4.x,XMLHTTPRequest中)对象和一个字符串   对请求的状态进行分类(“成功”,“未修改”,   “error”,“timeout”,“abort”或“parsererror”)。截至jQuery 1.5,   完整设置可以接受一系列功能。每个功能都会   被轮流打电话。这是一个Ajax事件。

您还可以使用成功和错误属性为成功或失败指定不同的功能。