JavaScript 回调 - 多线程

JavaScript callback - multithreading

本文关键字:多线程 回调 JavaScript      更新时间:2023-09-26

我想开发一个非常简单的战略游戏。您可以在 http://wiesenberg.info/hope/上找到示例!

如果单击某个按钮,将创建该项目(进度条)。完成后,该项目将出现在操场上。如您所见,如果您一个接一个地单击它就可以工作。但是,一旦您单击一个按钮两次(启动 2 个相同类型的项目),第二个项目将不会完成,因为第一个项目尚未完成并增加了变量。有没有一种简单的方法来执行多线程或仅解决我的错误?

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

这是重要的代码:

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);
    });
}

我会查看JQuery Deferred(http://api.jquery.com/jQuery.Deferred/)和Promise文档,以管理您要实现的目标。因此,您可以对异步调用发生的顺序应用一些控制。

您还有 Q.js (https://github.com/kriskowal/q) 是用于管理此类方案的不错库。

否则,您有已经提到的用于模拟多线程行为的 Web 工作者,但我认为这不是您想要的。