首页 > 其他分享 >手写promise

手写promise

时间:2022-10-04 17:02:55浏览次数:37  
标签:status resolve value onFulfilled padding promise reject 手写

 

 


class Promise{
constructor(excutor){
this.value = '';
this.reason = '';
this.status = 'padding'
this.onFulfilledCallback = []
this.onRejectedCallback = []
let resolve = (value)=>{
/*2.这个判断是为了status不可逆 只能从 padding转化为 成功或者失败*/
if (this.status == 'padding') {
this.status = 'fulfilled'
this.value = value
/*3.当转态改变的时候依次执行队列里面储存的then函数里面对应的回调*/
this.onFulfilledCallback.forEach(fn=>{
fn()
})
}
};
let reject = (reason)=>{
/*2.这个判断是为了status不可逆 只能从 padding转化为 成功或者失败*/
if (this.status == 'padding') {
this.status = 'rejected'
this.reason = reason
/*3.当转态改变的时候依次执行队列里面储存的then函数里面对应的回调*/
this.onRejectedCallback.forEach(fn=>{
fn()
})
}
};
/*1. 当发生异常是捕获异常 */
try{
excutor(resolve,reject)
}catch (e){
reject(e)
}

}
then(onFulfilled,onRejected){
//4.防止使用者不传成功或失败回调函数,所以成功失败回调都给了默认回调函数
onFulfilled = typeof onFulfilled === "function" ? onFulfilled : value => value;
onRejected = typeof onRejected === "function" ? onRejected : error => { throw error };
let newPromise;
if(this.status == 'fulfilled'){
return newPromise = new Promise((resolve,reject)=>{
setTimeout(()=>{
try{
let x = onFulfilled(this.value)
this.resolvePromise(newPromise, x, resolve, reject);
}catch (e){
reject(e)
}
})

})

}
if(this.status == 'rejected'){
return newPromise = new Promise((resolve,reject)=>{
setTimeout(()

标签:status,resolve,value,onFulfilled,padding,promise,reject,手写
From: https://blog.51cto.com/u_15689678/5731385

相关文章

  • 手写Promise——基于es6的Promise实现(含详细注释)
      1.PromiseA+规范官方英文地址:​​https://promisesaplus.com/​​中文翻译可参考​​http://malcolmyu.github.io/malnote/2015/06/12/Promises-A-Plus/​​2.代码......
  • 用PyTorch搭建LeNet-5手写识别
    用PyTorch搭建LeNet-5手写识别首先申明,这篇博客用于记录本人看完LeNet-5论文,并对其中的算法进行复现的记录,可以看成是学习笔记在此推荐一个b站up的视频从0开始撸代码--手......
  • 手写现代前端框架diff算法-前端面试进阶
    前言在前端工程上,日益复杂的今天,性能优化已经成为必不可少的环境。前端需要从每一个细节的问题去优化。那么如何更优,当然与他的如何怎么实现的有关。比如key为什么不能使用......
  • 几个常见的javascript手写题,你能写出来几道
    实现new过程:要点:函数第一个参数是构造函数实例的__proto__指向构造函数的原型属性prototype函数剩余参数要挂载到一个实例对象上构造函数有返回值时,就返回这个返回......
  • Java手写实现链表队列和数组队列【数据结构与算法】
    packagealgorithm;/**@authorAdministrator@date2022-09-1317:50*/publicclassQueueLinked{privatestaticclassNode{Eitem;Nodenext;publicNode(Eitem,N......
  • Java手写实现栈【数据结构与算法】
    packagealgorithm;importjava.util.Arrays;importjava.util.Iterator;/**@authorAdministrator@date2022-09-1216:38数组栈*/publicclassMyArrayStack{//定义......
  • js进阶手写常见函数
    JavaScript进阶的必要性无论是学习react还是vue,它们都是js的应用框架。剥去他们的壳子看到的始终是js,所以作为一个前端大厨必须要熟练掌握好js这个大勺,才能烧出一顿好菜无......
  • js进阶手写常见函数
    JavaScript进阶的必要性无论是学习react还是vue,它们都是js的应用框架。剥去他们的壳子看到的始终是js,所以作为一个前端大厨必须要熟练掌握好js这个大勺,才能烧出一顿好菜......
  • cnpm使用 install报错throw err;^Error: Cannot find module 'fs/promises
    cnpm使用install报错throwerr;^Error:Cannotfindmodule'fs/promises这个问题主要是node的版本和cnpm的版本不匹配--检查一下项目中的node版本和cnpm版本:cnpm的......
  • JS Promise 异步编程
    JavaScriptPromise异步编程概述Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言......