Promise相关

83 阅读2分钟

Promise

通过 new Promise(),传递两个函数进去,一个为请求成功的回调 resolve,一个为请求失败的回调 reject

当调用 resolve() 的时候,会进入到 Promise.then(),可以拿到 resolve 传递出来的值进行下一步操作

当调用 reject() 的时候,会进行 Promise.catch() ,可以拿到 reject 传递出来的值进行下一步操作

通过resolve() 函数调用的时候,可以传递的参数

  1. 普通对象或者值
  2. 传入一个 Promise对象,那么当前 Promise 的状态由传入的Promise决定
  3. 传入一个带有then()方法的对象,会自动执行该then方法,此时Promise的状态由 then( resolve,reject)中决定
// const newPromise = new Promise((resolve, reject) => {
    //     reject()
    // })
​
    const objPromise = {
        then(resolve,reject){
           console.log('123');
            resolve()
        }
    }
​
    new Promise((resolve, reject) => {
        console.log('-------');
        resolve(objPromise)
    }).then( res=>{
        console.log(res,'这是resolve');
    }).catch((err) => {
        console.log(err,'这是reject');
    })
.then()

使用.then()方法,是可以有返回值的

他的返回值是一个新的Promise对象,并且执行这个新的Promise对象的resolve方法,所以这就可以形成Promise的链式调用

const newpromise = new Promise((resolve,reject)=>{
    resolve()
})//使用 Promise函数,调用resolve()
​
newpromise.then((res)=>{
    return 111
})//return 相当于返回了一个新的Promise对象,然后执行了里面的resolve方法
.then((res)=>{
    console.log(res,'打印res')
})//此时的then方法相当于接收上面返回的新的Promise对象,resolve给的值///如果返回的是一个Promise对象的话,也会再创建一个Promise对象,并且将之前常见的放入resolve里面,Promise对象的状态的话,由最后一个Promise对象决定
.catch()

.catch方法和.then方法一样,都会返回一个Promise对象

.finally()

该方法无论什么状态都会执行

Promise.resolve()

该方法相当于,new Promise,然后resolve(),里面传递的参数有三种情况

Promise.reject()

该方法相当于 ,new Promise,然后Reject,里面的参数没有三种情况,不管里面的参数是什么都会调用.catch()抛出

Promise.all( [] )

同时执行多个Promise,只有等所有的函数都 返回resolve之后,才会执行then,但凡一个返回Reject,都会执行catch

Promise.allSettled()

同时执行多个Promise,返回的结果会标注 发起的Promise的状态

Promise.race()

里面哪个Promise 执行的快,使用哪个Promise里面的状态进行回调

Promise.any()

会等到第一个Promise返回 resolve,执行then()

如果全部都返回 reject(),则会调用catch()方法,并且告知所有请求都返回 reject