JavaScript回调-多线程

JavaScript回调-多线程,javascript,jquery,multithreading,html,callback,Javascript,Jquery,Multithreading,Html,Callback,我想开发一个非常简单的战略游戏。 你可以在上面找到一个例子 如果单击按钮,将创建该项目(progressbar)。项目完成后,将出现在操场上。正如你所看到的,如果你一个接一个的点击它就会工作。但是,一旦您单击一个按钮两次(启动2个同类项目),第二个项目将不会完成,因为第一个项目尚未完成并增加了变量。有没有一种简单的方法来执行多线程或只是解决我的bug 我还想添加一个函数,您可以通过单击progressbar停止项目。我试过了,它在列表中消失了,但是图标仍然显示出来,因为函数没有得到另一个函数被执

我想开发一个非常简单的战略游戏。 你可以在上面找到一个例子

如果单击按钮,将创建该项目(progressbar)。项目完成后,将出现在操场上。正如你所看到的,如果你一个接一个的点击它就会工作。但是,一旦您单击一个按钮两次(启动2个同类项目),第二个项目将不会完成,因为第一个项目尚未完成并增加了变量。有没有一种简单的方法来执行多线程或只是解决我的bug

我还想添加一个函数,您可以通过单击progressbar停止项目。我试过了,它在列表中消失了,但是图标仍然显示出来,因为函数没有得到另一个函数被执行的消息。所以我还需要一个progressbar的break函数。我希望你了解我的问题!谢谢

以下是重要的代码:

function addSygehus() {
    sygehusBarID++;
    sygehusID++;
    $("#addProject").append("<div id=sygehus" + sygehusID +
            " class='progress progress-striped active'><div class='progress-bar progress-bar-success' id=sygehusbar"
            + sygehusBarID + " aria-valuetransitiongoal='100'>Sygehus</div></div>");
    function countdown(callback) {
        var bar = document.getElementById("sygehusbar"+sygehusBarID),
                time = 0, max = firsttime,
                int = setInterval(function() {
            bar.style.width = Math.floor(100 * time++ / max) + '%';
            if (time - 1 == max) {
                clearInterval(int);
                // 600ms - width animation time
                callback && setTimeout(callback, 600);
            }
        }, 1000);                            
    }

    countdown(function() {
        $("#sygehus" + sygehusID).remove();
        $("#sygehusPic" + sygehusID).show(1000);

    });
}
函数addSygehus(){
sygehusBarID++;
sygehusID++;
$(“#addProject”)。追加(“Sygehus”);
函数倒计时(回调){
var bar=document.getElementById(“sygehusbar”+sygehusBarID),
时间=0,最大值=第一次,
int=setInterval(函数(){
bar.style.width=Math.floor(100*time++/max)+'%';
如果(时间-1==最大值){
清除间隔(int);
//600ms-宽度动画时间
回调和设置超时(回调,600);
}
}, 1000);                            
}
倒计时(函数(){
$(“#sygehus”+sygehusID).remove();
$(#sygehusPic+sygehusID).show(1000);
});
}

我将查看JQuery Deferred()并承诺使用文档来管理您的目标。因此,您可以对异步调用的发生顺序应用一些控制

您还了解到,Q.js()是一个很好的库,用于管理这类场景


否则,正如前面提到的那样,您可以使用web workers来模拟多线程行为,但我认为这不是您想要的。

Javascript只有一个线程,唯一的其他选项是web workers或异步行为(这在同步操作中很难伪造)。因此没有解决方法?还有其他的方法来做progressbar吗?一种比倒计时更快的方法?这不是多线程或任何事情的问题。这只是让取消progressbar的代码也执行任何必要的清理(调用clearInterval、删除任何div等)的问题。但是,如果没有取消进度条的代码,我们就无法帮助您。