1一1

Promise async await

新手学习 有问题欢迎指出

概念

  • Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值
 三个状态
pending   //预备状态  没成功,也没失败
fulfilled   //请求成果
rejected    // 拒绝  请求失败

用法

promise 配合async 和 await使用最佳 async会隐式的返回一个promise

// 下面的promise传两个参数 一个是成功,一个是失败    其也可以传参  参数为需要返回的结果
   function Random_(flag) {
            return new Promise((resolve, reject) => {
                console.log("开始摇 ")
                setTimeout(() => {
                    let n = parseInt(Math.random() * 6 + 1, 10) //1~6
                    if (n > 3) {
                        if (flag === "big") {
                            resolve(n)
                        } else {
                            reject(n)
                        }
                    } else {
                        if (flag === "small") {
                            resolve(n)
                        } else {
                            reject(n)
                        }
                    }
                }, 1000)
            })
        }

// 写法一   then解析执行的promise返回的结果     第一个函数是成功 参数是promise返回的结果     第二个参数是reject拒绝的结果  参数也是值  
        async function Use() {
                   let res = await Random_("big").then((succ)=>{
                    console.log("猜对了",succ)
                },(fail)=>{
                    console.log("猜错了",fail)
                })
        }

       Use()
// 写法二
 try {
                let res = await Random_("big") //返回的直接是参数  不是promise对象
                console.log("点数是", res)
                console.log("执行ok  猜对了")
            } catch (error) {
                console.log("点数是", error)
                console.log("执行失败 catch了")
            }

promise.all 方法

  • 普通的promise.all方法 不适用await
    • 需要用then解析成功与否 两个都成功(resolve)才会调用 第一个
Promise.all([Random_('big'), Random_('big')])
  .then((n)=>{console.log(' 的点数是'+n+'你猜中了')}
  , (error)=>{console.log(' 的点数是'+error+'你又输光了')})
  • 使用异步 用try catch捕获执行失败的处理
try{
    let res =  await Promise.all([Random_("big"),Random_("big")])  //返回一个数组  数组的值分别是 函数返回的结果     结果  res (2) [4, 4]
}catch{
  xxx
}         
  • promise.race
Promise.race([promise1, promise2]).then(success1, fail1)

只要有一个成功就会执行success 有一个失败就会调fail

总结:

  • 个人感觉async没办法把结果return出去 所以在react中 可以直接setstate() 直接取出
  • async可以try cache 不用.then来处理 不.then返回的就是一个promise对象

学习参考地址: https://zhuanlan.zhihu.com/p/361262290

posted on 2022-08-01 13:40  1一1  阅读(17)  评论(0编辑  收藏  举报