【发布时间】:2021-02-26 19:53:51
【问题描述】:
这是我尝试过的代码:
// **Creating variables and functions**
let number_object = { num: 0 }
function doHomework(callback) { //Starts doing the homework, supposed to finish after 5 seconds
console.log("writing")
setTimeout(() => {
callback()
}, 5000)
}
function Finished() { //Called when 5 seconds are over
console.log("Finished the homework")
}
function loop_(num_object) {
++num_object.num;
let i = 0;
for (i = 0; i < 3000000000; ++i) { }
console.log(`loop number ${num_object.num} over`)
}
// **Calling functions now**
doHomework(Finished)
let i = 0;
for (i = 0; i < 10000000000; ++i) { } //This takes much more than 5 seconds
console.log(`This took more than 5 seconds, yet "finished" is not going to appear next`)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
输出是:
writing
This took more than 5 seconds, yet "finished" is not going to appear next
loop number 1 over
loop number 2 over
loop number 3 over
loop number 4 over
loop number 5 over
loop number 6 over
loop number 7 over
loop number 8 over
loop number 9 over
loop number 10 over
Finished the homework
所以我认为输出表明,代码首先将调用堆栈中的所有函数排队,然后运行它们。这就是为什么所有 10 个函数都在调用堆栈中排队,所以只有在它们完成后,才会出现“完成”
【问题讨论】:
-
Ty @Seblor 我可能要经历一段时间,因为我还没有听说过微任务和宏任务。会让你知道
-
您还可以阅读有关 Microtasks 的文档:developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/… 尽管 StackOverflow 对我链接的问题的回答应该涵盖您的情况。
-
@Seblor 同时,我并不是要粗鲁,但是,你能说出首先发生了什么吗?
-
对不起,我没有太多时间,但如果你不明白发生了什么,我可以在今天晚些时候写一个答案
标签: javascript node.js asynchronous callback