谈谈promise,谈谈微任务

谈谈promise,谈谈微任务
  • javascript 的异步执行机制,思路基本上是这样的,先执行同步任务,然后执行异步微任务,然后执行异步宏任务
  • 还说什么,宏任务是 setTimeOut这些,然后微任务是 promise这些
  • 其实,在早些时候,我就测试过setTimeOut和promise的异步执行优先级那个时候我就知道 promise的异步执行优先级 是要高于 setTimeOut的如果你告诉我因为 setTimeOut是异步宏任务promise是异步微任务,因为是先执行微任务然后执行异步宏任务,因此,promise的异步优先级要比 setTimeOut要高,我想说这和没说是一样的
如何创建一个微任务?
  • 我不知道有没有人想过这个问题,可能你会觉得直接使用 promise就可以创建一个微任务,但是,如果不使用 promise呢?
  • 事实上,这个问题就已经问到了 promise异步执行的本质了
  • 这个问题必须要搞懂,因为接下来我要使用 javascript原生实现一个真正的 promise
  • 为此我看了很多 promise原生实现的博客,希望能找到 实现微任务的蛛丝马迹,但是绝大多数的博客的 promise原生实现的异步实现方式(或者说 微任务),都是基于 setTimeOut,这很明显就已经脱离了 promise基于微任务的本质了
直接看 promise的源代码
  • 没办法,为了找到 微任务的实现方式,我只能去看 promise的源代码,因为 promise的异步机制就是基于微任务
  • 在这里有一个忠告,如果你想真正理解一个原理,直接看源代码是最好最直接的
  • 还真给我找到了,请看:(以下是 promise的源代码)
    在这里插入图片描述
  • 这个函数引起了我的关注,因为在文件的他引入了一个插件
    在这里插入图片描述
  • 这就是微任务的本质
    在这里插入图片描述
  • 使用这个插件就可以创建一个微任务使用 npm i asap可以直接下载
  • 当然了,但这里我也就不继续深究了,因为 这已经可以让我实现一个原生的 promise了,但是如要继续深究的话,会涉及到 javascrip更底层的代码
现在来创建一个微任务
var asap = require("asap/raw")

asap(function(){
    console.log("center...")
})
  • 这就是一个简单的微任务,可能你会觉得有点假,现在拿他来和 异步宏任务 setTimeOut比较一下 异步优先级
var asap = require("asap/raw")
setTimeout(()=>{
    console.log("header...")
},0)
asap(function(){
    console.log("center...")
})
console.log("footer...")
  • 如果这真的是微任务的话,那么,结果应该是 footer,center,header
    在这里插入图片描述
  • 看到了吗,这就是微任务的创建方式,有了这个就可以实现原生实现一个 promise了
下一章我在原生实现一个 promise
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值