小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
- 上篇讲解了promise then catch等方法 这期一起来了解一下剩下的方法
Promise resolve 方法
/*
Promise函数对象的resolve方法
返回一个指定value的成功promise
*/
Promise.resolve = function (value) {
// 返回一个成功/失败的promise
return new Promise((resolve, reject) => {
// value是promise 使用value得结果作为promise结果
if (value instanceof Promise) {
value.then(resolve, reject)
} else {
// value不是promise => promise变成功 数据是value
resolve(value)
}
})
}
Promise reject 方法
/*
Promise函数对象的reject方法
返回一个指定reason的失败promise
*/
Promise.reject = function (reason) {
// 返回一个失败的promise
return new Promise((resolve, reject) => {
reject(reason)
})
}
Promise all方法
/*
Promise函数对象的all方法
返回一个promise,只有当所有promise都成功时,否则失败
*/
Promise.all = function (promises) {
//用来保存所有成功value的数组 指定数组长度
const values = new Array(promises.length)
// 用来判断函数执行次数
let resolvedCount = 0
return new Promise((resolve, reject) => {
// 遍历获取每个promise的结果
promises.forEach((p, index) => {
p.then(
value => {
resolvedCount++
// 将成功的value加入values
values[index] = value
// 如果全部成功了,将return的promise改变成功
if (resolvedCount === promises.length) {
resolve(values)
}
},
reason => {
// 只要一个失败整个就失败
reject(reason)
}
)
})
})
}
Promise race方法
/*
Promise函数对象的race方法
返回一个promise,结果由第一个完成的promise决定
*/
Promise.race = function (promises) {
return new Promise((resolve,reject)=>{
promises.forEach((p, index) => {
p.then(
value => {
// 一旦有成功的,将return变为成功
resolve(value)
},
reason => {
// 一旦有失败的,将return变为失败
reject(reason)
}
)
})
})
}
class版本
总结
- Promise全系文章更新结束
- 下篇一起来看看JavaScript中的异步