如何实现一个简单的Promise
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,今天就跟大家聊聊有关如何实现一个简单的Promise,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一个简单的 Promise 的粗糙实现,关键
千家信息网最后更新 2025年01月31日如何实现一个简单的Promise
今天就跟大家聊聊有关如何实现一个简单的Promise,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
一个简单的 Promise
的粗糙实现,关键点在于
当 pending
时,thenable
函数由一个队列维护当状态变为 resolved(fulfilled)
时,队列中所有thenable
函数执行当 resolved
时,thenable
函数直接执行
rejected
状态同理
class Prom {
static resolve (value) {
if (value && value.then) {
return value
}
return new Prom(resolve => resolve(value))
}
constructor (fn) {
this.value = undefined
this.reason = undefined
this.status = 'PENDING'
// 维护一个 resolve/pending 的函数队列
this.resolveFns = []
this.rejectFns = []
const resolve = (value) => {
// 注意此处的 setTimeout
setTimeout(() => {
this.status = 'RESOLVED'
this.value = value
this.resolveFns.forEach(({ fn, resolve: res, reject: rej }) => res(fn(value)))
})
}
const reject = (e) => {
setTimeout(() => {
this.status = 'REJECTED'
this.reason = e
this.rejectFns.forEach(({ fn, resolve: res, reject: rej }) => rej(fn(e)))
})
}
fn(resolve, reject)
}
then (fn) {
if (this.status === 'RESOLVED') {
const result = fn(this.value)
// 需要返回一个 Promise
// 如果状态为 resolved,直接执行
return Prom.resolve(result)
}
if (this.status === 'PENDING') {
// 也是返回一个 Promise
return new Prom((resolve, reject) => {
// 推进队列中,resolved 后统一执行
this.resolveFns.push({ fn, resolve, reject })
})
}
}
catch (fn) {
if (this.status === 'REJECTED') {
const result = fn(this.value)
return Prom.resolve(result)
}
if (this.status === 'PENDING') {
return new Prom((resolve, reject) => {
this.rejectFns.push({ fn, resolve, reject })
})
}
}
}
Prom.resolve(10).then(o => o * 10).then(o => o + 10).then(o => {
console.log(o)
})
return new Prom((resolve, reject) => reject('Error')).catch(e => {
console.log('Error', e)
})
看完上述内容,你们对如何实现一个简单的Promise有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
函数
队列
内容
状态
粗糙
关键
关键点
更多
知识
篇文章
行业
行当
资讯
资讯频道
频道
进一
支持
有关
统一
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全审查指的是什么
邯郸电商软件开发公司
石油地质软件开发好就业吗
服务器被ddos装安全狗
Bios查看服务器管理ip
网络安全等级保护建设小组
区域网代理服务器怎么打开
沈阳软件开发公司多吗
微生物中文数据库
数据库技术与应用题库和答案
注册谷歌服务器流程
网络安全 整改通知书
马云公司网络安全管家
数据在数据库中是如何表示的
租好的服务器如何发布项目
农商行软件开发岗笔试面试
扫一扫链接网络安全吗
网络安全线下宣传
奇安信网络安全试题
期货交易服务器
通用型s3服务器
售后服务器哪个牌子好
蔡甸区信息网络安全维护管理系统
服务器硬盘 1T 价格
wifi公共网络安全吗
天下传奇3影魅传说无需服务器
国产以太网串口服务器批发
互联网科技实例
莹若上海互联网科技有限公司
数据库五大语言的关系