小程序Promise

92 阅读1分钟
  • promise是如何解决回调地狱的问题
    • 使用then链式调用
  • promise的状态分为几种,分别是什么
    • 待定 pending:初始状态,既灭有被兑现也没有被拒绝
    • 已兑现 fulfilled: 意味着操作成功完成
    • 已拒绝 rejected:意味着操作失败
  • 如何让promise变成已兑现的状态,如何接收已兑现的结果
    • 通过resolve可以把promise的状态从pending转变为已兑现
    • 通过promise实例.then方法可以接收已兑现的结果
  • promise对象用于表示一个异步操作的最终完成(或失败)及其结果
<script>
const isA = true
const isB = true
const isC = true
const isD = true
function A(){
    //1.创建Promise实例
    //2.构造函数中接收一个回调函数
    //3.resolve:是一个回调函数,表示promise执行成功
    //4.reject:是一个回调函数,表示promise执行失败
     return new Promise((resolve,reject)=>{
         //5.处于待定(pending)下,代码会立即执行
         console.log"执行A");
         setTimeout(()=>{
             if(isA){
                //执行成功->已兑现
                resolve("成功")
            }else{
                //执行失败->已拒绝
                reject("失败")
            }
         })
     })

}
 function B(){
    //1.创建Promise实例
    //2.构造函数中接收一个回调函数
    //3.resolve:是一个回调函数,表示promise执行成功
    //4.reject:是一个回调函数,表示promise执行失败
     return new Promise((resolve,reject)=>{
         //5.处于待定(pending)下,代码会立即执行
         console.log"执行B");
         setTimeout(()=>{
             if(isA){
                //执行成功->已兑现
                resolve("成功")
            }else{
                //执行失败->已拒绝
                reject("失败")
            }
         })
     })

}
 function C(){
    //1.创建Promise实例
    //2.构造函数中接收一个回调函数
    //3.resolve:是一个回调函数,表示promise执行成功
    //4.reject:是一个回调函数,表示promise执行失败
     return new Promise((resolve,reject)=>{
         //5.处于待定(pending)下,代码会立即执行
         console.log"执行C");
         setTimeout(()=>{
             if(isA){
                //执行成功->已兑现
                resolve("成功")
            }else{
                //执行失败->已拒绝
                reject("失败")
            }
         })
     })

}

//使用promise实例
A().then(res=>{
   console.log(res)
   return B()
}).then(res=>{
   console.log(res)
   return C()
}).then(res=>{
   console.log(res)

})




</script>
  • 使用async await简化promise的异步操作
<script>
const isA = true
const isB = true
const isC = true
const isD = true

async function test(){
    const resA = await A();
    console.log(resA);
    const resB = await B();
    console.log(resB);
    const resC = await C();
    console.log(resC);
    
}
test()
</script>
  • 使用promise简单封装wx.request(注意不要勾选ES6转ES5)
pA(){
    return new Promise((resolve,reject)=>{
    wx.request({
        url:'XXXXXX',
        success:(res)=>{
        resolve(res)
        },
        fail:(err)=>{
        reject(err)
        }
    })
    })
}

 async function test(){
     const resA = await pA();
     console.log(resA); 
 }
 test()