繁体   English   中英

setTimeout 后的回调函数

[英]Callback function after setTimeout

我没有通过下面的回调得到想要的结果。 我正在尝试编写一个在 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");});

您误解了setTimeout的用法。

您所要求的正确实现是:

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

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

当您调用doHomeWork它时,您会做两件事(两行代码): 1. 说浏览器添加一个回调作为新任务,在 500 毫秒后执行。 2. 打印 console.log(...)

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

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

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

如果您想在该回调之前等待,特别是如果回调是 API 调用,则创建一个单独的函数并从该函数的setTimeout内部返回已解决的承诺,并在执行 API 调用之前使用 async await 等待该等待函数。

如果你没有得到一些东西,那么你可以要求进一步的解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM