Promise--初体验

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Promise--初体验相关的知识,希望对你有一定的参考价值。

1. Promise初体验


1.1 异步任务抽奖案例

抽奖规则:

  • 点击按钮, 1s 后显示是否中奖(30%概率中奖)
  • 若中奖弹出 “恭喜恭喜, 奖品为 10万 RMB 劳斯莱斯优惠券”
  • 若未中奖弹出 “再接再厉”

规则说明:

因为抽奖一般会把数据传回到后台,所以我们延时1s来模拟数据传输到后台,然后从后台获取返回结果的过程。

页面结构:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本使用</title>
    <link crossorigin='anonymous' href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css"
          rel="stylesheet">
</head>
<body>
<div class="container">
    <h2 class="page-header">Promise 初体验</h2>
    <button class="btn btn-primary" id="btn">点击抽奖</button>
</div>
<script>
    //生成随机数
    function rand(m, n) {
        return Math.ceil(Math.random() * (n - m + 1)) + m - 1;
    }
</script>
</body>
</html>

在这里插入图片描述


1.1.1 实现方法一: 定时器

JS代码:

    /**
     点击按钮,  1s 后显示是否中奖(30%概率中奖)
     若中奖弹出    恭喜恭喜, 奖品为 10万 RMB 劳斯莱斯优惠券
     若未中奖弹出  再接再厉
     */
        //获取元素对象
    const btn = document.querySelector('#btn');
    //绑定单击事件
    btn.addEventListener('click', function () {
        //定时器
        setTimeout(() => {
            //30%  1-100  1 2 30
            //获取从1 - 100的一个随机数
            let n = rand(1, 100);
            //判断
            if (n <= 30) {
                alert('恭喜恭喜, 奖品为 10万 RMB 劳斯莱斯优惠券');
            } else {
                alert('再接再厉');
            }
        }, 1000);
       });

在这里插入图片描述


1.1.2 实现方法二: Promise形式实现

JS代码:

    /**
     点击按钮,  1s 后显示是否中奖(30%概率中奖)
     若中奖弹出    恭喜恭喜, 奖品为 10万 RMB 劳斯莱斯优惠券
     若未中奖弹出  再接再厉
     */
        //获取元素对象
    const btn = document.querySelector('#btn');
    //绑定单击事件
    btn.addEventListener('click', function () {
        //Promise 形式实现
        // resolve 解决  函数类型的数据
        // reject  拒绝  函数类型的数据
        new Promise((resolve, reject) => {
            setTimeout(() => {
                //30%  1-100  1 2 30
                //获取从1 - 100的一个随机数
                let n = rand(1, 100);
                //判断
                if (n <= 30) {
                    resolve(n); // 将 promise 对象的状态设置为 『成功』
                } else {
                    reject(n); // 将 promise 对象的状态设置为 『失败』
                }
            }, 1000);
        }).then((value) => {
            alert('恭喜恭喜, 奖品为 10万 RMB 劳斯莱斯优惠券, 您的中奖数字为 ' + value);
        }, (reason) => {
            alert('再接再厉, 您的号码为 ' + reason);
        });
    });

在这里插入图片描述


1.1.3 Promise讲解

promise的构造函数

  • Promise的构造函数的参数是一个函数,改函数有2个值resolve, reject
  • resolve:异步任务成功时候的回调函数,调用后将 promise 对象的状态设置为 『成功』
  • reject:异步任务失败时候的回调函数,调用后将 promise 对象的状态设置为 『失败』

then()方法

  • then()方法的作用是Promise实例添加解决(fulfillment)和拒绝(rejection)状态的回调函数。then()方法会返回一个新的Promise实例,所以then()方法后面可以继续跟另一个then()方法进行链式调用。
  • then()方法有2个参数,这2个参数都接收函数参数,第一个参数是解决(fulfillment)状态的回调函数,另外一个参数是拒绝(rejection)状态的回调函数。

小结

  • promise的构造函数是同步执行
  • promise.then中的函数是异步执行


以上是关于Promise--初体验的主要内容,如果未能解决你的问题,请参考以下文章

promise初体验

vs code初体验

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

python初体验

前端面试题之手写promise