Promise.resolve()
- 返回一个指定value的成功的Promise对象,参数可以是一个Promise方法,也可以是一个值value
setTimeout(function () {
console.log(3);
}, 0);
Promise.resolve().then(function () {
console.log(2);
});
console.log(1);
//输出 1 2 3
实现
/*
Promise的函数对象的resolve方法
返回一个指定value的成功的promise
*/
Promise.resolve = function (value) {
// 返回一个成功或者失败promise
return new Promise((resolve, reject) => {
// 判断value是不是promise
if (value instanceof Promise) {
//使用value的结果作为promise的结果
value.then(resolve, reject)
} else {
resolve(value)
}
})
}
Promise.reject()
- 返回一个指定value的失败的Promise对象,参数可以是一个Promise方法,也可以是一个值value
const p = Promise.reject('出错了');
// 等同于
const p = new Promise((resolve, reject) => reject('出错了'))
p.then((value)=>{
console.log(value);
},
(reason)=>{
console.log(reason);
}
);
//输出 '出错了'
实现:
/*
Promise的函数对象的reject方法
返回一个指定reason的失败的promise
*/
Promise.reject = function (reason) {
// 返回一个失败的promise
return new Promise((resolve, reject) => {
reject(reason)
})
}
Promise.catch()
- 捕捉发生错误的回调函数,如果then函数处理完了错误 就不会传到catch里面 除非return一个失败的promise或者throw传递错误
const p3 = Promise.reject('失败了')
p3.then(
(value) => {
console.log('123', value)
},
(reason) => {
// console.log('处理失败了', reason)
// throw reason
return Promise.reject(reason)
}
).catch((reason) => {
console.log('catch捕获', reason)
})
实现:
/*
Promise原型对象的catch()
指定失败的回调函数
返回一个新的promise对象
*/
//直接调用then函数
Promise.prototype.catch = function (onRejected) {
return this.then(undefined, onRejected)
}