钉钉这个优先级这么奇怪呢,不是按顺序执行,钉钉小程序。这是什么情况?
你说的这个优先级奇怪的情况很可能是由于发生了微任务(Microtask)和任务(Macrotask)之前的差别 causing 的。
简单来说,微任务和宏任务的执行顺序是:
首先执行所有微任务
然后执行一个宏任务
继续执行所有剩余的微任务
执行下一个宏任务,依此类推
那么什么是微任务和宏任务呢?
宏任务(Macrotask):主要指事件循环中的任务。如 setTimeout、setInterval、 I/O 等
微任务(Microtask):主要指 Promise 的 .then/.catch 等
钉钉小程序的执行逻辑也遵循这个规则。
比如你的代码有这么几个任务:
js
Copy
setTimeout(() => {
console.log(1)
}, 0)
Promise.resolve().then(() => {
console.log(2);
})
console.log(0);
你可能期望输出是:
0 1 2
但是实际的输出却是:
0 2 1
这是为什么呢?
因为:
首先会执行所有微任务,打印出 0 和 2
然后执行第一个宏任务,打印 1
因此优先级高的其实并不是任务的声明顺序,而是其类型。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。