我创建了一个类,该类在初始化后开始下载JSON文件。

但是,下载异步运行。
因此,在声明它之后,我开始使用它,但是由于它尚未加载文件而失败。

我可以关闭异步功能,但是还有另一种方法可以不冻结浏览器吗?

我目前正在使用setTimeout选项来解决它,但这似乎是一个丑陋的hack。

  var d;
  $(document).ready(function() {
      d = new Duk('element');
      d.getBlueprint('hud.json');
      setTimeout(start, '2000');
  });

  function start(){
      test = new d.Dialog(d.blueprint.screens.test);
      test.draw();
  }

最佳答案

您必须将事件处理程序附加到对象加载完成事件。您正在使用的库必须提供此事件。我不知道Duk是什么或getBlueprint()做什么,但是您应该检查文档中的类和方法是什么,并查看是否存在oncomplete回调。如果存在,您将执行以下操作:

$(document).ready(function() {
    d = new Duk('element');
    d.getBlueprint('hud.json', {
        onComplete: function() {
            test = new d.Dialog(d.blueprint.screens.test);
            test.draw();
        }
    });
});


显然,我只是弥补了这一点。我不知道您的库是否具有这样定义的onComplete方法,但希望您明白我的意思。在不了解您正在使用的库的更多信息的情况下,我无法给出更好的示例。

关于javascript - 如何在Javascript中“排队”一段代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4729042/

10-13 00:36