#016#Promise构造函数

本文介绍了如何实现Promise构造函数,详细讲解了状态管理(PENDING,FULFILLED,REJECTED)以及resolve函数。文章还涉及微任务的概念,特别是queueMicrotask在处理回调队列中的作用。最后指出,考虑到中小企业对小程序和移动端的需求,学习这些技术是很有价值的。
摘要由CSDN通过智能技术生成

前言

日志,各位看官就当乐子看吧。

正经人谁写日记啊?!! ——鹅城县长

实现Promise

实现Promise

原文:手撕Promise

构造函数

// Promise 构造函数

// 定义状态
const PENDING='pending'
const FULFILLED='fulfilled'
const REJECTED='rejected'

function Promise(executor){
    // 保证 this 指向实例
    const that=this 
    that.status=PENDING // 初始化状态
    that.data=undefined // 完成(成功或失败)后回调的值
    that.callbacks=[]    // 回调队列,用{ onResolve, onReject }对象存储指定的回调
    
    // resolve 改变实例状态为成功的函数
    function resolve(value) {
        if(that.status!==PENDING) return;
        that.status=FULFILLED;
        that.data=value;
        // 需要回调,调用 queueMicrotask 执行
        if(that.callbacks.length>0) {
            queueMicrotask(that.callbacks.forEach(cb => cb(that.data)))
        }
    }
}

其中提到了一个微任务ueMicrotask()的概念。

微任务和任务

MDN上写的很难懂啊。
关键区别:首先,每当一个任务存在,事件循环都会检查该任务是否正把控制权交给其他 JavaScript 代码。如若不然,事件循环就会运行微任务队列中的所有微任。
其次,如果一个微任务通过调用 queueMicrotask(), 向队列中加入了更多的微任务,则那些新加入的微任务 会早于下一个任务运行。

彩蛋

中小企业对小程序、移动端的需求很大,先学学小程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值