首页 > 其他分享 >Promise的理解和使用

Promise的理解和使用

时间:2023-08-17 20:44:06浏览次数:111  
标签:异步 random 中奖 Promise 使用 100 理解 Math

一:Promise是什么?

(1)Promise是JS中进行异步编程的解决方案
     备注:旧方案是单纯使用回调函数
     异步编程包括:fs文件操作、数据库操作、AJAX、定时器......
(2)从语法上来说:Promise是一个构造函数
(3)从功能上来说:Promise对象用来封装一个异步操作并可以获取其成功/失败的结果值

二:Promise有什么用?

(1)指定回调函数的方式更加灵活
(2)支持链式调用,可以解决回调地狱问题
初认识Promise
<body>
    <div class="container">
        <button class="btn" id="btn">点击抽奖</button>
    </div>
    <script>
        // 生成随机数
        function random(m,n){
            return Math.floor(Math.random()*(Math.abs(m-n)+1))+Math.min(m,n)
        }

        /*
            点击按钮  2s后显示是否中奖 (30%的概率中奖) 
            若中奖则弹出    恭喜你,中奖了,奖品为5000RMB奔驰优惠劵
            若未中奖则弹出  很遗憾,没中奖,再接再厉哦
         */

        //  获取对象元素
        const btn = document.querySelector("#btn")
        // 绑定单击事件
        btn.addEventListener('click',function(){
            // 定时器   异步代码
            /* setTimeout(()=>{
                // 30%中奖几率  获取1~100的随机数
                let n = random(1,100)
                if(n<=30){
                    alert("恭喜你,中奖了,奖品为5000RMB奔驰优惠劵")
                }else{
                    alert("很遗憾,没中奖,再接再厉哦")
                }
            },1000) */

            // Promise形式实现
            // resolve 解决  函数类型的数据
            // reject  拒绝  函数类型的数据
            const p = new Promise((resolve,reject)=>{
                setTimeout(() => {
                    // 30%中奖几率  获取1~100的随机数
                    let n = random(1, 100)
                    if (n <= 30) {
                        resolve(n) //将Promise对象的状态设置为 成功
                    } else {
                        reject(n)  //将Promise对象的状态设置为 失败
                    }
                }, 1000);
            })

            // 调用then方法  有两个参数
            // 第一个参数是 Promise对象成功时的回调函数  value是回调函数的形参 实参为Promise对象成功时resolve()中的内容
            // 第二个参数是 Promise对象失败时的回调函数  reason是回调函数的形参 实参为Promise对象失败时reject()中的内容
            p.then((value)=>{
                alert("恭喜你,中奖了,奖品为5000RMB奔驰优惠劵,中奖号码为"+value)
            },(reason)=>{
                alert("很遗憾,没中奖,再接再厉哦,你的号码为"+reason)
            })
        })
    </script>
</body>

标签:异步,random,中奖,Promise,使用,100,理解,Math
From: https://www.cnblogs.com/bingMIN/p/17638810.html

相关文章

  • 使用fontforge进行字体拆分
    fontforge官方网站游戏开发为了节省内存和资源下载量,需要把字体不用的字删掉,或者拆成多个字体逐级加载,批量操作用UI就比较难搞了,用fontforge搞起来比较顺手安装fontforge后即可通过脚本代码批量进行操作,使用相对熟悉一点的python脚本,官方文档首先写一个powershell脚本来启动并......
  • 使用protobuf生成各大厂的开放平台接口
    protoc-gen-go_api一款用protobuf文件生成go的http调用代码。具体代码见protoc-gen-go_api安装goinstallgithub.com/dev-openapi/protoc-gen-go_api@latest使用依赖googleapis的http.proto和annotations.proto。并且需要放到google/api/目录下如果google/api是在工程文......
  • 使用MSIX Packaging Tool工具修改msix程序包
    前言MSIXPackagingTool使用户和IT管理员能够将Windows应用重新打包为MSIX格式,方便用户分享,MSIX包可在Windows11和Windows10系统中安装。该软件提供了一个交互式用户界面和一个用于转换的命令行。修改步骤1、获取MSIXPackagingToolWindows10通过应用商店获取......
  • 使用 OpenTelemetry 构建可观测性 03 - 导出
    上一个博文中,我提到如何使用OpenTelemery的特定语言API来收集遥测数据,包含手动和自动的埋点技术,这很重要!但是,收集遥测数据只是解决方案的第一步。你需要把遥测数据路由转发到其他地方,同时添加额外的元数据信息。这时就轮到SDK发挥作用了。链路追踪生产者(TracerProvider......
  • JDBC Vertica Source Connector 使用文档
    支持以下引擎SparkFlinkSeaTunnelZeta关键特性批处理精确一次性处理列投影并行处理支持用户自定义拆分支持查询SQL并实现投影效果描述通过JDBC读取外部数据源数据。支持的数据源信息DatasourceSupportedversionsDriverUrlMavenVerticaDiffer......
  • 为什么 cl_gui_dialogbox_container 只能在 at selection output 事件中使用
    首先,我们来了解一下cl_gui_dialogbox_container类。这是SAP的一个类,用于创建一个对话框容器,通常用于在对话框中显示一些GUI控件,例如:图形、控件等。cl_gui_dialogbox_container对象主要用于在模态对话框中创建自定义容器,它允许我们将GUI控件(如ALVGRID,HTMLViewer等)嵌入......
  • gdb + gdbserver调试时,无法使用Ctrl+C暂停调试的问题
    使用gdbserver进行远程调试,跟踪调试板子上的程序时,发现targetremote后,想下几个断点,发现ctrl+c无法暂停程序,因此断点也下不了了。只能在连接前,提前下好断点,这明显是恶心的,因为分析问题过程中有随机下断点的需求。但是我记得之前这个程序,在同样的硬件上是可以后期下断点的。google......
  • SAP ABAP 系统支持的锁操作类型和各自使用场景的详细讲解试读版
    本教程前一篇文章,我们已经通过浏览器和SAPGUI里两个具体的例子,介绍了SAP应用程序中锁机制的工作原理。109.SAPABAP应用程序中的锁机制和工作原理介绍上面的文章提到,SAPABAP系统中加锁和解锁的函数都是ABAPDDIC即事务码SE11自动生成的,到目前为止我们都只是在学习S......
  • 【软硬件环境及工具安装使用】edgeai-torchvision的使用
    前言 一、安装edgeai-torchvision环境 首先需要理解的是,虚拟环境安装完torch之后再安装torchvision,且torchvision是基于源码编译安装的,因为thestandardtorchvisionwillnotsupportallthefeaturesinthisrepository.博主系统CUDA版本是11.7,但是当前edgeai-torchvisi......
  • 【软硬件环境与工具使用】setuptools模块
    前言  1)setuptools之setup函数参数详解BuildingandDistributingPackageswithSetuptools-setuptools68.0.0.post20230808documentationPython库打包分发(setup.py编写)简易指南|Huoty'sBlogsetup.py实现C++扩展和python库编译_pythonsetup.py编译_ming7771......