我有一个函数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.
我该怎么做才能获得所需的输出?
答案 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.");
});