setTimeout之后的回调函数

问题描述 投票:0回答:2

我在下面的回调中没有得到预期的结果。我正在尝试写一个简单的回调,它在setTimeout完成后执行,但是我看到回调函数首先执行,然后是实际的函数。

我在这里缺少什么?得到如下结果。

doing my homework Maths
finished my homework

这是我正在尝试运行的代码。

function doHomeWork(subject, callback){
setTimeout(function(){console.log("doing my homework:", subject)},500)
callback();
}

doHomeWork("Maths", function(){console.log("finished my homework");});
javascript callback
2个回答
1
投票

当您调用setTimeout()时,会注册浏览器回调。这并不意味着后续的陈述也会在以后执行。它们将在调用函数setTimeout()后立即执行。发生超时时,setTimeout()将仅调用您传递的函数参数。所以,如果回调需要在setTimeout()参数化函数之后执行。最好在setTimeout()函数参数中移动该调用。所以,代码看起来像

setTimeout(function() {
    //Your stuff
    callback();
}, 500);

0
投票

你错过了setTimeout的用法。

正确实现您的要求是:

function doHomeWork(subject, callback){
    setTimeout(callback,500);
    console.log("doing my homework:", subject)
}

doHomeWork("Maths", function(){console.log("finished my homework");});

当您调用doHomeWork时,它会执行两项操作(两行代码):1。假设浏览器将回调添加为500ms后要执行的新任务。 2.打印console.log(...)

在500ms之后,浏览器将添加一个带有将被调用的回调的新任务。

© www.soinside.com 2019 - 2024. All rights reserved.