首页 > 求一个js阻塞同步回调函数的例子

求一个js阻塞同步回调函数的例子

我们知道,js执行程序有同步和异步之分,同步的时候阻塞,异步的时候非阻塞。我对回调函数总是有一些懵懂,求一个同步的回调函数的例子


/****************** 同步回调 ************************/
var syncFun = function(callback) {
    var start = new Date();
    while(new Date() - start < 1000) { // delay 1 sec
        ;
    }
    callback();
    console.log('同步方法返回'); // 2
};

syncFun(function() {
    console.log('这是同步回调'); // 1
});
console.log('同步方法会阻塞当前逻辑'); // 3

/****************** 异步回调 ************************/
var asyncFun = function(callback) {
    setTimeout(callback, 1000); // delay 1 sec
    console.log('异步方法返回'); // 4
};
asyncFun(function() {
    console.log('这是异步回调'); // 6
});
console.log('异步方法不会阻塞当前逻辑'); // 5

分析:
第一个同步的例子中,传入的回调函数在同步方法(syncFun)运行完成后才被调用,调用后同步方法结束并返回。
而在异步的例子中,异步方法调用后立即返回,异步事件完成后(这里用setTimeout超时事件模拟,实际还可以是Ajax、用户行为事件等异步事件),传入的回调函数才会被调用,在此期间,代码执行逻辑不会被阻塞。
请注意同步方法执行顺序(1~3)和异步方法执行顺序(4~6)的差别。


jQuery$.ajax的配置参数有async一项,如果设置为false,表示发送同步请求,将锁住浏览器,用户其他操作必须等待请求完成才可以执行。


异步才要回调函数,同步要什么回调啊。还有js单线程,异步也要等当前空闲才能被执行

【热门文章】
【热门文章】