同步窗口.设置超时回调

Synchronize window.setTimeout callback

本文关键字:回调 超时 设置 窗口 同步      更新时间:2023-09-26
setTimeout(function() {
    console.log("1");
}
console.log("2");

基本上,我想在"1"之前输出"2"。如何将回调函数与当前"调用方"线程同步?

你不能在 JavaScript 中支撑线程(除了 alertconfirm 内置(,所以在console.log("1")之后实现console.log("2")的唯一方法是:

  1. 把它放在超时函数中:

    setTimeout(function() {
        console.log("1");
        console.log("2");
    }, delay);
    

    。或者在该超时函数调用的另一个函数中,尽管您已经有一个用于setTimeout的函数,但不清楚(除了代码组织(为什么您需要一个单独的函数。

  2. 把它放在一个单独的函数中,你传递给setTimeout的延迟更长:

    setTimeout(function() {
        console.log("1");
    }, delay);
    setTimeout(function() {
        console.log("2");
    }, longerDelay);
    

    。请注意,longerDelay确实比delay足够长,这样您就不会在日程安排方面出现一些混乱。

请注意,我在上面说的是"线程"。除非你使用的是具有特定语法的 Web Workers,否则浏览器上的 JavaScript 是单线程的。两个 JavaScript 函数不能同时运行,除了围绕 alert 和 ajax 完成等的边缘情况浏览器错误(至少某些版本的 Firefox 运行你的 ajax 完成回调,而你有一个函数在等待alert;奇怪但真实,没有什么可以依赖跨浏览器甚至跨版本(,你不能暂停一个 JavaScript 函数的轨道,而另一个 JavaScript 函数运行。

尝试类似操作:

setTimeout(function() {
    console.log("1");
    callback();
}
function callback(){
   console.log("2");
}