全局变量值不反映循环

时间:2016-06-15 15:44:12

标签: javascript jquery

我的函数OAuth.getSessionInfo仍然返回响应,为什么循环变为无限?

var resp = false;
OAuth.getSessionInfo(function(data) {
  resp = true;
})
do {
    console.log("waiting............")
} while (!resp);
PS:请提出问题的好标题。我对问题的标题应该感到困惑

3 个答案:

答案 0 :(得分:1)

让我们提醒一下多线程和并发意味着什么:

  • 多线程 - 同时做多件事。
  • 并发 - 在多个事物之间快速切换,从而模拟它们同时完成。

Javascript既不支持第一种技术也不支持第二种技术。相反,它执行代码块直到结束,然后执行使用setTimeoutsetInterval计划的下一个块或来自事件处理程序的一个块(例如onclickonload )。

现在,如果你查看你的代码,你可以看到它不能在没有内部函数完成的情况下完成,但是内部函数不会被执行直到外部函数完成。这就是你的应用程序挂起的原因。您还可以尝试下一个演示您问题的代码:

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);