promise源码实现(宏任务版promise)(1),c语言程序设计小程序

这篇具有很好参考价值的文章主要介绍了promise源码实现(宏任务版promise)(1),c语言程序设计小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

this.status = XPromise.RESLOVE

}

}

reject(value){

if(this.status === XPromise.PENDING){

this.value = value

this.status = XPromise.REJECT

}

}

}

  • promise内部是有错误检查机制的,如果代码有错误的地方会立即将下一个promise的状态改成失败的状态,并携带错误信息

// 错误检查机制,本质上就是try-catch就可以实现了

class XPromise{

constructor(func){

}

then(onreslove,onreject){

// onreslove onreject 分别代表的是then的两个函数

try{

}catch(err){

// 有错误直接走到 onreject 函数

onreject(err.message)

}

}

}

  • promise有 reslove,reject,all,race四个静态方法,后两个传递的promise的数组,前两个可以正常的值或者是promise

  • then方法的返回值也是一个promise,同时具有穿透效果(一个空的then什么的都不做,后面的then可以接受到不操作之前promise)

  • promise具有链式操作的功能

class XPromise{

constructor(func){

}

then(onreslove,onreject){

return new XPromise((reslove,reject)=>{

// onreslove onreject 分别代表的是then的两个函数

try{

}catch(err){

// 有错误直接走到 onreject 函数

reject(err.message)

}

})

}

}

总结:

最重要的还是我们对第一个promise的封装,因为第一个实现了,后面的一些静态方法返回的都是这个promise,无非就是一个不断重复套娃的操作。

上面的代码片段提供了promise几个重要的点的涉及思路,真正在写的时候如果全部按照那样写会很夸张代码量会特别巨大,是有很多地方是可以进行封装的

完整代码

class XPromise{

static PENDING = ‘pending’

static RESLOVE = ‘reslove’

static REJECT = ‘reject’

constructor(func){

this.status = XPromise.PENDING

this.value = null

this.callBack = []

/*

函数是拥有bind方法,传递一个新的this对象,返回一个函数的复制,同时这个复制的函数的this是修改了传递对象为上下文的函数对象

*/

try {

func(this.reslove.bind(this),this.reject.bind(this))

} catch (error) {

this.reject(error.message)

}

}

reslove(value){

// console.log(‘va’,this)

/*

在外部构造函数调用,这里的this指向的本来应该是window,因为是类 使用的是严格模式 会变成undefined,所以得不到

我们想要的结果,所以可以使用bind强制修改this的绑定

*/

if(this.status === XPromise.PENDING){

this.value = value

this.status = XPromise.RESLOVE

}

/*

只要是执行到 then方法里面的 onreslove 或者是 onreject 方法 说明一定是异步的

所以这里也先用 setTimeOut 来处理

*/

setTimeout(() => {

this.callBack.map(item=>{

item.onreslove(this.value)

})

});

}

reject(reason){

if(this.status === XPromise.PENDING){

this.value = reason

this.status = XPromise.REJECT

}

setTimeout(() => {

this.callBack.map(item=>{

item.onreject(this.value)

})

});

}

then(onreslove,onreject){

let xP = new XPromise((reslove,reject)=>{

/*

如果没有传递函数,就自己封装一个函数,不至于报错种植运行

*/

if(typeof onreslove !== ‘function’){

/* 当没传递 onreslove 的时候,打印onreslove位 undefined typeof undefined 的结果 也是undefined 所以这里只需要检查 typeof onreslove !== ‘function’ 就可以排除其他所有的情况了 */

onreslove = ()=> this.value

}

if(typeof onreject !== ‘function’){

/* 这个是为了解决then的代码穿透问题, 当then没有传递任何参数的时候 只需要把值返回 给下一个then的promise处理即可 */

onreject = ()=>this.value

}

if(this.status === XPromise.PENDING){

this.callBack.push({

onreslove:value=>{

try {

this.parse(xP,onreslove(value),reslove,reject)

} catch (error) {

this.parse(xP,onreject(error.message),reslove,reject)

}

},

onreject:reason=>{

try {

this.parse(xP,onreject(reason),reslove,reject)

} catch (error) {

reject(error.message)

}

}

})

}

if(this.status === XPromise.RESLOVE){

/*

then 方法是异步的,我们可以把它封装到 暂时这里就先把它封装到 setTimeout宏任务队列里,后期再改装成微任务队列

*/

setTimeout(() => {

this.parse(xP,onreslove(this.value),reslove,reject)

}, 0);

}else if(this.status === XPromise.REJECT){

setTimeout(() => {

this.parse(xP,onreject(this.value),reslove,reject)

}, 0);

}

})

return xP

}

parse(xP,result,reslove,reject){

if(xP=== result){

/*

在 promise 中 是不允许出现 一个promise 返回的是 自己本身的这个promise

当返回的是自己本身的时候 就会直接报错

*/

throw new TypeError(‘Chaining cycle detected for XPromise’)

}

try {

if(result instanceof XPromise){

// 在then中返回的是一个 prmise对象

/*

promise的用法是 在 then默认返回的是一个primise,但是其实我们是可以手动自己写一个promise返回的

*/

result.then(res=>{

reslove(res)

},err=>{

reject(err)

})

}else{

reslove(result)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。

因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
promise源码实现(宏任务版promise)(1),c语言程序设计小程序,2024年程序员学习,c语言,小程序,开发语言
promise源码实现(宏任务版promise)(1),c语言程序设计小程序,2024年程序员学习,c语言,小程序,开发语言
promise源码实现(宏任务版promise)(1),c语言程序设计小程序,2024年程序员学习,c语言,小程序,开发语言

既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
promise源码实现(宏任务版promise)(1),c语言程序设计小程序,2024年程序员学习,c语言,小程序,开发语言

一个总结,更是展示自己能力的重要机会。**

因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
[外链图片转存中…(img-bsKrcP1S-1712530165986)]
[外链图片转存中…(img-iNhaLHfD-1712530165986)]
[外链图片转存中…(img-sOXuz32B-1712530165987)]

既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
[外链图片转存中…(img-eLMFnfTV-1712530165987)]文章来源地址https://www.toymoban.com/news/detail-853159.html

到了这里,关于promise源码实现(宏任务版promise)(1),c语言程序设计小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言程序设计期末大作业(学生信息管理系统)(可自取源码)

    高校学生信息管理系统 (一)在高校学生管理系统中包含九个主要操作: 退出系统; 学生信息的录入; 学生信息的打印; 学生信息的保存; 学生信息的读取; 学生人数的统计; 学生信息的查找; 学生信息的修改; 学生信息的删除。 (二)设计流程 首先确认用switch ca

    2024年02月10日
    浏览(51)
  • 基于JavaWeb+SSM+Vue微信小程序校园兼职任务平台系统的设计和实现

    随着社会的发展和全球疫情的冲击,大学生的就业形势越来越严峻。越来越多在校大学生选择兼职工作,但兼职信息鱼龙混杂,信息真假难以辨别。为了方便在校大学生寻找兼职工作,因此,设计一种安全高效的校园兼职任务平台小程序极为重要。 为设计一个安全便捷,并且

    2024年02月04日
    浏览(45)
  • 学生日常事务小程序的设计与实现毕业设计源码

    博主介绍:✌ 专注于VUE,小程序,安卓,Java,python,物联网专业,有16年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。 目录 研究的背景: 研究或应用的意义: 国外研究现状: 国内研究现状: 研究

    2024年02月20日
    浏览(22)
  • 网上拍卖小程序的设计与实现毕业设计源码

    博主介绍:✌ 专注于VUE,小程序,安卓,Java,python,物联网专业,有16年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。 目录 研究的背景: 研究或应用的意义: 国外研究现状: 国内研究现状: 研究

    2024年02月20日
    浏览(30)
  • (微信小程序毕业设计)校园圈子小程序的设计与实现(附源码+论文)

    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 安卓app毕业设计 🌎Java毕业设计 目前各个高校基本都有各自的社区,但仍以传统的BBS、论坛等形式为主,移动互联网形式下,多以班级、社

    2024年02月08日
    浏览(44)
  • C语言程序设计—通讯录实现

    功能如下: 添加用户 修改用户 删除用户 查找用户(可重名) 按名字或年龄排序 显示用户 保存通讯录 日志追加  有如下知识点: 动态数组 结构体 枚举 自定义标识符和宏 文件打开与存储 函数 指针 循环  排序 简述特点: 将人员信息放在一个PeoInf的结构体中,再创建一个

    2024年02月09日
    浏览(39)
  • Springboot健康饮食小程序的设计的实现毕业设计源码280920

    健康饮食小程序的设计与实现 摘 要 本文设计了一种基于微信小程序的健康饮食小程序小程序,系统为人们提供了方便快捷、即用即搜的健康食谱服务,包括健康食谱,医疗资讯、注册登录等,用户能够方便快捷地查看资讯、搜索健康方面得食谱、还能了解各食物科普等。健

    2024年02月09日
    浏览(44)
  • 微信小程序网易云音乐设计与实现 毕业设计-附源码261620

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的网易云音乐系统被用户普遍使用,为方便用户能够可以随时进行微信小程序的网易云音乐系统的

    2024年02月05日
    浏览(34)
  • ssm+微信小程序网易云音乐设计与实现毕业设计源码261620

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的网易云音乐系统被用户普遍使用,为方便用户能够可以随时进行微信小程序的网易云音乐系统的

    2023年04月17日
    浏览(40)
  • SSM+微信小程序网易云音乐设计与实现 毕业设计-附源码261620

      随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的网易云音乐系统被用户普遍使用,为方便用户能够可以随时进行微信小程序的网易云音乐系统

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包