上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

[油猴脚本开发指南]Promise执行顺序问题

[复制链接]

182

主题

1388

帖子

757

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
757
发表于 2021-8-25 10:22:46 | 显示全部楼层 | 阅读模式

同步代码与异步代码

js是一个单线程的编程语言,在执行过程中,通常按顺序往下执行,这种我们称之为同步代码。但是如果有些事情并不需要现在进行,比如我们可以post一条数据,在返回数据后自动调用回调的函数,这种情况就是属于异步代码了。

异步代码

异步代码又分为宏任务和微任务。

微任务有nextTick,Promise,MutationObserver等等

宏任务有setinterval,setTimeout等等。

由于属于基础教程,所以提供一个简单粗暴的结果:微任务听着就比宏任务小,所以微任务先执行,宏任务后执行。

我们来看一个demo

console.log('主线程1')
new Promise(function(resolve, reject){
    console.log('创建Promise,也属于主线程')
    resolve('1')
}).then(function (data2){
   console.log('then属于微任务')
})
console.log('主线程2')
setTimeout(()=>{console.log('宏任务')},0)

图片.png

我们首先console

然后进入new promise,在new Promise的时候由于是创建Promise的过程,所以属于同步代码,会正常输出一个console

然后resolve了这个promise

then注册到了这个promise上,属于一个微任务。

往下在主线程搞了console输出

然后碰到了setTimeout,这是一个宏任务

所以代码执行完毕之后任务队列还有

then以及setTimeout

then属于微任务优先执行,所以先执行then,后执行setTimeout。

那么到这里你已经强行记下了宏微任务了!

常用的很多代码和骚操作其实都基于这个的,如果下次你碰到类似的代码就可以解释了。

结语

撒花~

混的人。

发表回复

本版积分规则

快速回复 返回顶部 返回列表