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对象
posted @ 2022-07-24 17:08  ycccc丶  阅读(794)  评论(0编辑  收藏  举报
//背景线条