通过回调在javascript中完成父函数后执行函数

时间:2015-12-29 10:40:42

标签: javascript

我有一个函数foo,它接受​​另一个函数作为参数。我希望传递给foo的函数作为参数在完成foo的所有任务后运行。我的Javascript代码是:

function foo(func){
    setTimeout(function(){
                    console.log("This will come first.");
               }, 2000);

    func();
}

foo( function(){console.log("This will come later.");} );

我想要的输出(在浏览器的控制台中)就像:

This will come first.     
This will come later.

但我得到上面代码的输出如下:

This will come later.
This will come first.

我该怎么做才能获得所需的输出?

3 个答案:

答案 0 :(得分:0)

您只需在暂停时拨打func()

function foo(func) {
    setTimeout(function() {
        console.log("This will come first.");
        func();
    }, 2000);


}

foo(function() {
    console.log("This will come later.");
});

答案 1 :(得分:0)

callback移至setTimeout()

function foo(func){
    setTimeout(function(){
          console.log("This will come first.");
          func();
    }, 2000);
}

答案 2 :(得分:0)

这是因为,当您注册setTimeout时,注册的事件将在特定时间执行,并且剩余的代码将继续执行。你应该在setTimeout

中调用你的函数

function foo(func) {
  setTimeout(function() {
    console.log("This will come first.");
    func();   // Call here
  }, 2000);

  //func();  // Not here
}

foo(function() {
  console.log("This will come later.");
});