繁体   English   中英

如果代码跳过宏任务,回调 function 的目的是什么?

[英]What's the purpose of callback function if code skips macrotasks?

最近尝试理解JavaScript中的回调函数,但是这个概念离我的理解还很远。 我有这样的代码:

function exampleFunc(callback) {
    console.log("Starting...");
    setTimeout(() => {
        console.log("Logged after 3 secs.");
    }, 3000);
    callback();
}

function displayMessage() {
    console.log("Log it!");
}
    
exampleFunc(() =>
{
    console.log("Further code.");
});

displayMessage();

我预计在调用exampleFunc()后,程序将等待 3 秒,然后调用回调和代码 rest。 但是,代码序列是:

Starting...
Further code.
Log it!
Logged after 3 secs.

为什么会这样? 我预计该程序将 output "Starting" ,然后等待并记录"Logged after 3 secs." , 然后 go 回调和 output "Further code" , 最后, "Log it!" .

调用setTimeout不会导致 function 中的代码进一步执行延迟。 setTimeout安排一个超时时间,然后立即继续执行 function 中代码的rest

您需要setTimeout回调中调用callback ,以便它仅在 3 秒后运行。

您还需要将displayMessage的调用放在传递给exampleFunc的回调中。

 function exampleFunc(callback) { console.log("Starting..."); setTimeout(() => { console.log("Logged after 3 secs."); callback(); }, 3000); } function displayMessage() { console.log("Log it;"). } exampleFunc(() => { console.log("Further code;"); displayMessage(); });

暂无
暂无

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

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