Promise的四个常用方法
Promise.resolve()
返回一个成功或失败的promise对象
1.传入一个字符串
let p = Promise.resolve('OK')
// 相当于
let p = new Promise((resolve,reject) => {
resolve('OK')
})
// 可以快速生成一个状态为成功的promise对象
2.传入一个promise对象,结果由这个对象决定
// 一个失败的promise对象
const p2 = new Promise((resolve, reject) => {
reject('no') // 失败
})
let p3 = Promise.resolve(p2)
// p3 状态 -> 失败 结果 -> 'no'
// 传入promise对象,那结果就由这个promise对象决定
3.传入一个具有then方法的对象,会将这个对象转换为promise然后执行对象的then方法
// 有then方法的对象
let thenable = {
then: function (resolve, reject) {
resolve(42); // 成功
}
};
let p4 = Promise.resolve(thenable)
console.log(p4);
// p4 状态 -> 成功 结果 -> 42
4.不传参,直接返回一个成功的promise对象
Promise.reject()
返回一个失败的promise对象,参数会原封不动的作为失败理由
let p = Promise.reject()
console.log(p);
// 一个成功的promise对象
const p2 = new Promise((resolve, reject) => {
resolve('ok')
})
let p3 = Promise.reject(p2)
console.log(p3);
// p3 状态 -> 失败 结果 -> p2
// 就算传一个成功的promise对象,还是会返回一个失败的promise对象,而且这个成功的promise对象是失败理由
Promise.all()
该方法接收一个由promise实例对象组成的数组作为参数
1.成功
let p1 = Promise.resolve('ok') // 成功
let p2 = Promise.resolve('okk') // 成功
let p3 = Promise.resolve('okkk') // 成功
let p = Promise.all([p1,p2,p3])
console.log(p);
// p 状态 -> 成功 结果 -> ['ok','okk','okkk']
// 如果数组中的primise对象都为成功,那就返回一个成功的promise对象。
// 成功的值:由每一个成功的promise对象返回值组成的数组
2.失败
let p1 = Promise.resolve('ok') // 成功
let p2 = Promise.resolve('okk') // 成功
let p3 = Promise.reject('error') // 失败
let p = Promise.all([p1,p2,p3])
console.log(p);
// p 状态 -> 失败 结果 -> 'error'
// 如果数组中有一个promise对象失败,则p的状态就失败,失败理由相同
// 好比:失败的话返回那个失败的promise对象
Promise.race()
也接收一个由promise实例对象组成的数组作为参数
race 有比赛的意思
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p1 is ok') // 成功
},1000) // 1s
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
reject('p2 is bad') // 失败
},500) // 0.5s
})
let p3 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p3 is ok') // 成功
},2000) // 2s
})
// race比赛 谁先改变状态返回谁
let p = Promise.race([p1,p2,p3])
console.log(p);
// p 状态 -> 失败 结果 -> 'p2 is bad'
// p1,p2,p3 率先改变状态的promise对象(不管成功/失败),p的状态都跟着改变,结果也与其相同
// 感觉就像:返回第一个改变状态的promise对象
本文来自博客园,作者:ycccc丶,转载请注明原文链接:https://www.cnblogs.com/imycc/p/16514776.html