Promise

150 阅读2分钟

Promise

1.为什么需要promise?

promise是为了解决回调地域的问题
回调地域:在回调函数中嵌套回调

2.Promise的基本使用

Promise是一个构造函数,通过new关键字实例化对象

 const p = new Promise((resolve,reject) => {})

1. promise实例有两个属性

  • state:状态
  • result:结果 image.png

2. promise的状态

  • 第一种状态:pending(准备,待解决,进行中)
  • 第二种状态:fulfilled(已完成,成功)
  • 第三种状态:rejected(已拒绝,失败)

promise状态的改变

通过调用resolve()和reject()改变当前promise对象的状态,promise状态的改变是一次性的

        const p = new Promise((resolve,reject) => {
            resolve();//调用当前函数,是当前函数的状态改为fulfilled
        })
        console.log(p)

image.png

        const p = new Promise((resolve,reject) => {
            // resolve();//调用当前函数,使当前函数的状态改为fulfilled
            reject();//调用当前函数,使当前函数的状态改为rejected
        })
        console.log(p)

image.png

3.promise的结果

        const p = new Promise((resolve,reject) => {
            resolve('成功的结果');//通过调用resolve,传递参数,改变当前promise对象的结果
            // reject('失败的结果');
        })
        console.log(p)

image.png

promise的方法

1.then方法

        // 参数:第一个是函数,第二个还是一个函数
        // 返回值:是一个promise对象
        p.then(()=>{
            console.log('成功啦');
        },()=>{
            console.log("失败了")
        })
        console.log(p)

        const p = new Promise((resolve,reject) => {
            resolve('123');
            // reject('456');
        })
        // 参数:第一个是函数,第二个还是一个函数
        // 返回值:是一个promise对象
        p.then((value)=>{
            console.log('成功啦',value);//通过形参的形式获取promise的结果
        },(err)=>{
            console.log("失败了",err)
        })
        console.log(p)

then方法返回一个新的promise实例,状态是pending

        // 如果promise的状态不改变,then的方法不会执行
        new Promise((resolve,rej) => {
            resolve('123');
        }).then((value) =>{
            console.log('成功',value)

            // 在then方法中,通过return将返回的promise实例改为fulfilled状态
            return 123
        },(error) =>{
            console.log('失败',error)
        }).then((val) =>{
            console.log('success',val)
        },(err) =>{
            console.log('error',err)
        })

2.catch方法

catch中函数的参数一般在什么时候执行?

  • 1.当promise的状态为rejected时候,被执行
  • 2.当promise执行体中出现代码错误时候,被执行
        const p = new Promise((resolve,reject) => {
            // reject ()
            console.log(a)
            throw new Error('失败')
        })
        p.catch((reson) => {
            console.log('出错啦',reson)
        })
        console.log(p)