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

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

[复制链接]
  • TA的每日心情
    开心
    前天 00:00
  • 签到天数: 49 天

    [LV.5]常住居民I

    350

    主题

    3064

    帖子

    3077

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    3077

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯

    发表于 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。

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

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

    结语

    撒花~

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

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