promises async/await的理解

126 阅读1分钟

promises 三种状态值(pending,fulfilled,rejected)

  • pending: 初始状态,不是成功或失败状态。|
  • fulfilled:意味着操作成功完成。
  • rejected: 意味着操作失败 基本用法
var promise = new Promise(function(resolve, reject) {
      // 处理结束后、调用resolve 或 reject
      // 异步处理 
 });
promise.then(onFulfilled).catch(onRejected)
  • # async和await

  1. await后面接一个会return new promise的函数并执行它
  2. await只能放在async函数里
  • 使用async和await获取成功的结果
function fn(){
    return new Promise((resolve, reject)=>{
        let sino = parseInt(Math.random() * 6 +1)
        setTimeout(()=>{
            resolve(sino)
        },3000)
    })
}
async function test(){
    let n =await fn()
    console.log(n)
}
test()
  • 获取失败的结果
function fn1(猜测){
    return new Promise((resolve, reject)=>{
        let sino = parseInt(Math.random() * 6 +1)
        if(sino > 3){
            if(猜测 === '大'){
                resolve(sino)
            }else{
                reject(sino)
            }
        }else{
            if(猜测 === '大'){
                reject(sino)
            }else{
                resolve(sino)
            }
        }
        setTimeout(()=>{
            resolve(sino)
        },300)
    })
}
async function test(){
    try{
        //把await及获取它的值的操作放在try里
        let n =await fn1('大')
        console.log('赢了' + n)
    }catch(error){
      //失败的操作放在catch里
        console.log('输了' + error)
    }
}
test()

async/await 的优势:可以很好地处理 then 链

对于单一的 Promise 链其实并不能发现 async/await 的优势,当需要处理由多个 Promise 组成的 then 链的时候,优势就能体现出来了,