首页 > 解决方案 > JS 回调不起作用

问题描述

<HTML>
 <HEAD>
   <SCRIPT LANGUAGE="JavaScript">      
    function f() {    
       g(function(err){
         if(!err){
            alert('Call me later');
         }
       });
    }    
    function g(callback) {
        setTimeout(function(){ alert("Call me first after 3 sec"); }, 3000);
        callback(false);            
    }
  </SCRIPT>
 </HEAD>
 <BODY onload="f()">
 </BODY>
</HTML>

在上面的代码片段中,我的目标是了解 JavaScript 回调功能。

我放了两个警报。我希望“先给我打电话”在 3 秒后发出警报,然后“稍后给我打电话”。但是,这不是警报发生的顺序。

标签: javascriptcallback

解决方案


这与您进行的异步调用有关。

调用该函数g将对其两行代码执行两个操作。首先,它将创建一个任务并安排它在 3000 毫秒内运行。其次,它会调用回调。回调然后警报'Call me later'

如果超时中的代码调用了回调,那么稍后调用我会排在第二位,但由于它没有,并且超时不是阻塞调用,你会看到当前的行为。

如果您希望警报排在第二位,则应该超时。

function g(callback) {
    setTimeout(function(){ 
       alert("Call me first after 3 sec"); 
       callback(false);
    }, 3000);            
}

推荐阅读