Promise的初体验

前端延时随机函数模拟抽奖

  • 点击按钮,模拟抽奖
  • 延时1s返回结果
    效果:

普通的使用回调方式的实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>抽奖</title>
</head>
<body>
    <button id="btn">点我抽奖</button>
    <script>
        // 生成随机数
        function rand(m, n){
            return Math.ceil(Math.random() * (n-m+1)) + m-1
        }

        const btn =  document.querySelector('#btn')
        btn.addEventListener('click', ()=>{
            setTimeout(()=>{
                 const n = rand(0, 100)
                 if(n<=30){
                     alert('恭喜中奖,奖品为劳斯莱斯优惠券满10万减10元')
                 }else{
                     alert('再接再厉')
                 }
             }, 1000)
        })

    </script>
</body>
</html>

使用Promise风格实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>抽奖</title>
</head>
<body>
    <button id="btn">点我抽奖</button>
    <script>
        // 生成随机数
        function rand(m, n){
            return Math.ceil(Math.random() * (n-m+1)) + m-1
        }

        const btn =  document.querySelector('#btn')
        btn.addEventListener('click', ()=>{
         //Promise对象接受一个回调函数
         //resolve 解决,函数类型
         //reject 拒绝,函数类型
        const p = new Promise((resolve, reject)=>{
            setTimeout(()=>{
                const n = rand(0, 100)
                if(n<=30){
                    // 可以传参数value
                    resolve(n)// 将Promise对象的状态设置为 成功
                }else{
                    // 可以传参数reason
                    reject(n) // 将Promise对象的状态设置为 失败
                }
            }, 1000)
        })
        
        // 调用then()方法
        p.then(
            // 成功的调用
            (value)=>{
                alert('恭喜中奖,奖品为劳斯莱斯优惠券满10万减10元,你的号码为'+value)
            }, 
            // 失败的调用
            (reason)=>{
                alert('再接再厉,你的号码为'+reason)
            }
        )
        })

    </script>
</body>
</html>
posted @ 2021-05-20 20:33  pangqianjin  阅读(41)  评论(0编辑  收藏  举报