如何实现一个简单的Promise
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,今天就跟大家聊聊有关如何实现一个简单的Promise,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一个简单的 Promise 的粗糙实现,关键
千家信息网最后更新 2025年12月02日如何实现一个简单的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安全错误
数据库的锁怎样保障安全
完美世界挂箱服务器
武威电视网络安全新闻
常用的软件开发有哪几种语言
乐视手机连接不了服务器
orcl数据库新建用户
数据库检查服务器
wifi的网络安全密钥
后端如何设计数据库
服务器安装安全吗
对软件开发的认识作文
龙盛招聘软件开发
db2数据库字段去空格
寒假网络安全是什么意思
浙江服务器代理商
甘肃生鲜管理软件开发
域名服务器安全性
互联网科技圈年度人物
闪图会保存在数据服务器吗
pgadmin数据库
新基建的网络安全
数据库切削用量
安阳工厂产品追溯软件开发
网络安全大练兵考核
tp如何获取数据库版本
c服务器开发框架
ug加工数据库模板
手机软件开发教程视频
网络技术中级考试真题
数据库怎样设计照片
物联网网络安全防范措施