我的函数OAuth.getSessionInfo仍然返回响应,为什么循环变为无限?
var resp = false;
OAuth.getSessionInfo(function(data) {
resp = true;
})
do {
console.log("waiting............")
} while (!resp);
PS:请提出问题的好标题。我对问题的标题应该感到困惑
答案 0 :(得分:1)
让我们提醒一下多线程和并发意味着什么:
Javascript既不支持第一种技术也不支持第二种技术。相反,它执行代码块直到结束,然后执行使用setTimeout
或setInterval
计划的下一个块或来自事件处理程序的一个块(例如onclick
,onload
)。
现在,如果你查看你的代码,你可以看到它不能在没有内部函数完成的情况下完成,但是内部函数不会被执行直到外部函数完成。这就是你的应用程序挂起的原因。您还可以尝试下一个演示您问题的代码:
setTimeout(function() {
x = false;
console.log("won't be invoked");
}, 0);
var x = true;
while(x) {
console.log('looping');
}
P.S。这个javascript的具体内容也是没有sleep
函数可用的原因 - 它只是没有任何意义来阻止你拥有的唯一代码执行者。
答案 1 :(得分:0)
你正在获得一个无限循环,因为你的while循环一直在运行,因为它没有停止点。你现在拥有它的方式就是说真的这样做。所以它一直在运行。
答案 2 :(得分:0)
循环开始后,您还没有更新resp
的值。请尝试以下方法:
var resp = false;
do {
OAuth.getSessionInfo(function(data) {
if (data.sessionActive == true) {
resp = true;
} else {
resp = false;
}
});
console.log("waiting............")
} while (!resp);