如何实现一个简单的Promise
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关如何实现一个简单的Promise,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一个简单的 Promise 的粗糙实现,关键
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
花魁咖啡
什么是科技互联网
伟宏互联网科技
苏州找大状互联网科技有限公司
科技互联网公司装修
科技企业和互联网企业
朗新科技与工业互联网
狮子座互联网科技
互联网科技公司官网
中国互联网科技发展
朗涯互联网科技
北京互联网络科技有限公司
镁科技互联网资讯平台
中国互联网有什么科技含量
互联网科技产业特征
乌苏新华互联网科技做什么的
本届互联网博览会上的黑科技
深圳艾果互联网通讯科技
厦门江牛科技互联网
众联互联网络科技
美国互联网科技巨头监管
互联网科技与金融科技
北京互联网科技
智网互联网科技
厦门比较好的科技互联网公司
未来五年的互联网科技
珠海东科互联网科技有限公司
互联网领先科技活动
兰石爱特工业互联网科技分公司
上海互联网科技园景观