由于Javascript是单线程的,我真的不知道这是一个什么问题,但它是这样的:我有一个被调用的函数,并在其中另一个函数。一旦Javascript开始执行内部函数,它同时恢复外部函数,当我真的希望它等到内部/嵌套函数完成然后继续。我希望这是可以理解的,但我会在评论中进一步阐述:
function foo() {
"use strict";
//get some json file
$.getJSON("bar.json", function(data) {
//calculate something with data
//put the result in this div (innerHTML)
});
//display: block the div with results
}
问题是,即使计算尚未完成,它也会立即显示div。然后它会抛出结果,这根本不是我想要的。我是否必须做出承诺或类似的事情?
提前感谢您的帮助。我非常感激。
答案 0 :(得分:1)
由于您的$.getJSON()
是异步操作,因此您需要使用Promise来获得所需的结果。在then
块中,您可以使用结果显示块。或者,这可以在$.getJSON()
块中完成。如果您需要后者,请按以下步骤操作:
function foo() {
"use strict";
//get some json file
new Promise(function(resole, reject) {
$.getJSON("bar.json", function(data) {
//calculate something with data
//put the result in this div (innerHTML)
resolve(data)
});
}).then(function(data) {
//display: block the div with results
});
}
答案 1 :(得分:0)
你不应该试图阻止主线程。相反,移动改变tearDown
的{{1}}的逻辑,该display:block
内部回调是在获取JSON后运行的,如下所示:
div
答案 2 :(得分:0)
Spencer Wieczorek非常有用的链接。我将代码更改为:
std::array<int, 64> ini_data()
{
std::array<int, 64> ret;
for(int i = 0; i < 64; i++)
{
ret[i] = i;
}
return ret;
}
const std::array<int, 64> DATA = ini_data();
void main()
{
print(DATA);
}
现在似乎有用了。非常感谢教我这种获得JSON的更好方法。