我有一个简单的.html页面:
</html>
<head>
<script type="text/javascript" src="jquery/jquery-1.8.2.js"></script>
...
<script type="text/javascript">
var obj;
function document_load() {
obj = new mySpace.myClass();
console.log("end document load");
}
</script>
</head>
<body onload="document_load()">
...
...
</body>
</html>
myClass是一个带有此构造函数的TypeScript类:
public constructor() {
console.log("begin constructor");
(<any>$).when(
jQuery.getJSON('path/myJson1.json', function (data) {
this.obj1 = data;
console.log("here1");
}),
jQuery.getJSON('path/myJson2.json', function (data) {
this.obj2 = data;
console.log("here2");
})
).then(function () {
if (this.obj1 && this.obj2) {
console.log("here3");
this.obj3 = new myClass3();
this.obj4 = new myClass4();
console.log("everything went ok");
}
});
}
实际上控制台会打印出来:
begin constructor
end document load
here1
here2
这种行为的原因(当然)是异步jQuery调用的原因(或者至少我猜)。如何获得以下行为?
begin constructor
here1
here2
here3
everything went ok
end document load
我澄清说jsons是正确的(我试图打印它们并且它们是正确的。)
答案 0 :(得分:0)
那是因为你没有向jQuery返回一个承诺,所以回调被调用,this.obj1 && this.obj2
都是空的。
更好的方法是:
(<any>$).when(
jQuery.getJSON('path/myJson1.json'),
jQuery.getJSON('path/myJson2.json')
)
.then(function (obj1, obj2) {
// Code
});
答案 1 :(得分:0)
用箭头功能(=&gt;)替换所有功能。这将确保&#34;这个&#34;指出所有函数体中的正确事物。