防止浏览器JavaScript页面刷新中的竞争条件

防止浏览器JavaScript页面刷新中的竞争条件,javascript,internet-explorer,Javascript,Internet Explorer,我的网页具有自动刷新功能。自动刷新是使用计时器实现的 GInterValId = window.setInterval("AutoRefresh()",interval); 用户还可以通过单击页面上的一些按钮来执行一些操作。自动刷新功能和用户操作正在创建竞争条件 我想防止这两个操作(自动刷新和按钮操作)同时发生 我该怎么做 这个呢: busy = false; function AutoRefresh() { if( busy ) return; busy = true;

我的网页具有自动刷新功能。自动刷新是使用计时器实现的

GInterValId = window.setInterval("AutoRefresh()",interval);
用户还可以通过单击页面上的一些按钮来执行一些操作。自动刷新功能和用户操作正在创建竞争条件

我想防止这两个操作(自动刷新和按钮操作)同时发生

我该怎么做

这个呢:

busy = false;

function AutoRefresh() {
    if( busy ) return;
    busy = true;
    ...
    ...
    ...
    busy = false;
}

function ButtonOperation() {
    if( busy ) return;
    busy = true;
    ...
    ...
    ...
    busy = false;
}
那么这个呢:

busy = false;

function AutoRefresh() {
    if( busy ) return;
    busy = true;
    ...
    ...
    ...
    busy = false;
}

function ButtonOperation() {
    if( busy ) return;
    busy = true;
    ...
    ...
    ...
    busy = false;
}

我假设您实际上希望在页面自动刷新之前完成按钮操作。在这种情况下,我会让您的按钮操作函数将操作添加到队列中,然后让AutoRefresh函数在执行刷新之前运行操作。

我想您实际希望的是在页面自动刷新之前完成按钮操作。在这种情况下,我会让按钮操作功能将操作添加到队列中,然后让自动刷新功能在执行刷新之前运行这些操作。

为什么要自动刷新。将其重新设计为非shitAside:不要将字符串传递给setInterval和setTimeout。直接传递函数,这样您就不会使用邪恶的eval:
setInterval(AutoRefresh,interval)
@missingno-当您可以传递函数的直接引用时,将字符串传递给setInterval可能很愚蠢,但它没有什么邪恶,也没有任何伤害或危险。为什么要自动刷新。将其重新设计为非shitAside:不要将字符串传递给setInterval和setTimeout。直接传递函数,这样您就不会使用邪恶的eval:
setInterval(AutoRefresh,interval)
@missingno-当您可以传递函数的直接引用时,将字符串传递给setInterval可能很愚蠢,但它没有任何邪恶之处,也不会带来伤害或危险。