我有以下代码:
Aventura.prototype.loadMap = function(u,f) {
var av = this;
$.getJSON("js/aventura/"+u+"/"+f, (function(data) { av.map = data; }));
};
它在目录f
中获取JSON文件u
,并在加载时将window.Aventura.map
设置为JSON响应。 这里的一切都运行良好,直到某些代码依赖于Aventura.map
。问题是我有这个init函数来设置对象:
Aventura.prototype.init = function(u,f) {
this.loadMap(u,f);
this.testRAF();
this.buildEnv();
this.generate();
this.startEventListeners();
this.resize();
this.activateWidgets();
};
Aventura.buildEnv
和Aventura.generate
都需要设置Aventura.map
。如何制作它以便它们仅在Aventura.loadMap
完成后执行?我仍然需要所有这些都是异步的,我不知道如何解决这个问题。
答案 0 :(得分:1)
如果Aventura
对象的初始化依赖于异步检索的数据,那么除了在HTTP请求返回后推迟Aventura
对象本身的初始化之外别无选择。
一个可能的变体可能是将结果放在加载主脚本的相同资源中,并在加载的DOM上初始化av
:
<html>
<head>
<script src="app.js"></script>
</head>
<body>
<script id="map-data" lang="application/json">
// json encoded data here
</script>
</body>
</html>
注意它是相同的概念:一旦你收集了所需的信息,就会初始化对象。