开发者社区> 问答> 正文

钉钉这个优先级这么奇怪呢,不是按顺序执行,钉钉小程序。这是什么情况?

1dbaa3e23fc03210a1aa0e8ab6934914.png钉钉这个优先级这么奇怪呢,不是按顺序执行,钉钉小程序。这是什么情况?

展开
收起
冰激凌甜筒 2023-07-12 17:19:22 81 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    你说的这个优先级奇怪的情况很可能是由于发生了微任务(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

    因此优先级高的其实并不是任务的声明顺序,而是其类型。

    2023-07-12 19:06:28
    赞同 展开评论 打赏
  • 这个异步请求,此回答整理自钉群"钉钉开发者社区(互助群)"

    2023-07-12 19:06:29
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
钉钉小程序——为工作方式插上翅膀 立即下载
钉钉客户端自动化的应用 立即下载
使命必达 —— 钉钉企业级 消息服务的机遇与挑战 立即下载