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线程。我想它不会工作,因为你用一个无限循环阻止浏览器。你为什么认为你需要等待?为什么不能在回调中执行下一个任务?看起来你在试图解决错误的问题。