/*
* @Author: sunxy
* @Date: 2021-07-08 23:33:30
* @LastEditors: sunxy
* @LastEditTime: 2021-07-11 23:30:18
* @Description: 手写 promise
* @FilePath: /feir/src/components/async.js
*/
//new Promise
const PENDING = 'pending' // 进行中
const FULFILLED = 'fulfilled' // 成功
const REJECTED = 'rejected' // 失败
class myPromise{
// 构造函数
constructor(executor){
executor(this.resolve,this.reject)
}
status = PENDING
value = undefined
reason = undefined
resolve = (value) => {
// 只能是pending 状态才能修改
if(this.status !== PENDING) return
this.status = FULFILLED
this.value = value
this.succCallback && this.succCallback(this.value)
}
reject = (reason) => {
// 只能是pending 状态才能修改
if(this.status !== PENDING) return
this.status = REJECTED
this.reason = reason
this.failCallback && this.failCallback(this.reason)
}
succCallback = undefined
failCallback = undefined
then(succCallback,failCallback){
if(this.status === FULFILLED){
succCallback(this.value)
}else if(this.status === REJECTED){
failCallback(this.reason)
}else{ // 正在pending 保存参数等到resole 或者 reject的时候再执行
this.succCallback = succCallback
this.failCallback = failCallback
}
}
}
// module.exports = myPromise
var p = new myPromise((resolve,reject) => {
setTimeout(()=>{
resolve('执行成功啦~')
},3000)
})
p.then((res)=>{
console.log('value',res)
})
[js异步编程]手写一个Promise
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 简答题 一、谈谈你是如何理解js异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务?...
- Part1 · JavaScript【深度剖析】 函数式编程与Js异步编程、手写Promise 文章说明:本专栏内...
- Study Notes[https://wuner.gitee.io/wuner-notes/fed-e-task...
- 简答题 一、谈谈你是如何理解JS异步编程的,EcentLoop、消息队列都是做什么的,什么是宏任务,什么是微任务?...
- 今天青石的票圈出镜率最高的,莫过于张艺谋的新片终于定档了。 一张满溢着水墨风的海报一次次的出现在票圈里,也就是老谋...