Javascript 等待执行回调

Javascript 等待执行回调,javascript,callback,wait,Javascript,Callback,Wait,我想等到回调结束。我试过这样的方法: let wait = true; setTimeout(() => { console.log("wait = false"); wait = false; }, 2000); console.log("waiting"); while(true) { if(!wait) break; } console.log("finished waiting"); 唯一的输出是 waiting 它不会继续下去。即使“wait=fals

我想等到回调结束。我试过这样的方法:

let wait = true;
setTimeout(() => {
    console.log("wait = false");
    wait = false;
}, 2000);
console.log("waiting");
while(true) {
    if(!wait) break;
}
console.log("finished waiting");
唯一的输出是

waiting

它不会继续下去。即使“wait=false”在2秒后也不会打印。有人能解释为什么会发生这种情况吗?

您的
while
循环永远不会让
设置超时运行。这是一个同步无限循环逻辑,将永远阻止js线程

setTimeout
是一种异步方法,在事件队列中注册自身。当主堆栈完成其工作时,事件循环检查队列中是否有挂起的工作,并将其带回主线程

在您的情况下,主堆栈永远不会空闲,因为
while
循环永远不会完成

您可以使用
Promise
来实现这一点

var承诺=新承诺((解决、拒绝)=>{
设置超时(()=>{
console.log('2s后执行超时');
resolve();//完成setTimeout时解析。
}, 2000);
});
console.log('waiting');

然后(=>console.log(“等待完成”);//使用“.then”在承诺解决后执行工作。
while
循环将永远不会运行
setTimeout
以运行。这是一个同步逻辑,将永远阻止js线程。我想它不会工作,因为你用一个无限循环阻止浏览器。你为什么认为你需要等待?为什么不能在回调中执行下一个任务?看起来你在试图解决错误的问题。