[英]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.