clearINterval和范围(clearINterval and scope)

2019-10-17 17:58发布

经与这里的一些间隔问题。

基本concpt是,我有一个进度条功能,1元的东西行,是从后端脚本馈信息。 我平这个脚本每5秒的时间间隔内调用Ajax。

这工作,但也有以倍数(即第2个进度条调用相同的功能),或者当项目被“关闭”(一个div幻灯片),应立即停止问题。 这是一些非常互trined代码,所以我会尽我所能,拔出必要的零件,但要注意,因为它的立场,这很可能将无法运行。

一个完整的步行though-函数名称已更改为保护无辜者:)

onlcick,DIV打开,而这个开始函数被调用:

function start(ID){
var request = $.ajax({  
    url: "script?DO=Start&ID="+ID
    ,  type: "GET"              
    ,  cache: false
    ,  dataType: "text"
});
request.done(function(msg) {
    startLoop(ID);      

});
request.fail(function(jqXHR, textStatus) {
    //alert("Request failed: " + textStatus );      
});
}

你可以看到,这个调用startLoop FNC,继续ping到更新信息的脚本(的getInfo())的信息:

function startLoop(ID){
var i = setInterval(function(){
    var xstatus = getInfo(ID);
    //other stufff that works       
    if(xstatus=="done"){
        clearInterval(i);
    }

}, 5000);
}

这与它自身工作正常。

如果第2点击事件打开第二窗口,它只是一个新的ID,并调用相同的功能。

因此,我有一个我的时间间隔,并摧毁一个似乎停止一切。 我应该i转换为对象,像i.ID?

此外,停车时,我有一个onclick =停止()调用,并从外循环,我似乎无法阻止它。

我如何重新安排这使它工作?

它应该支持启动,停止和autoupdating,1级或多个同步的项目。

Answer 1:

为什么不使用setTimeout ,而不是clearInterval ,因为你已经把杀害其回调里面的间隔有责任:

// using this approach might require changing the name of this function
function startLoop(ID) { 
   setTimeout(function(){
        var xstatus = getInfo(ID);

        //other stufff that works       
        if(xstatus!=="done"){
            startLoop(ID); // do it all over again if it's not complete
        }

    }, 5000);
}

这会给你相同的行为,但有一对夫妇加奖金。 其一,这不应该导致当一个人完成被杀死了你的其他工作。 另一种是,这将再次异步5秒运行,所以如果请求开始服用超过5秒即可完成,超时不会ping到它,它返回之后,相对于每5秒里面胡乱射击,是否将请求已经完成。



文章来源: clearINterval and scope