Promise入门

news2024/11/24 8:25:18

Promise入门

  1. Promise的基本概念

在这里插入图片描述

  • 男女相爱了,女方向男方许下一个承诺怀孕new Promise,这是会产生两种结果怀上(resolve)和没怀上(reject),resolve对应thenreject对应catch,无论是否怀上都会执行finally
 <script>
          
          let isPregnant = false;
          const promise = new Promise((resolve,reject)=>{
                if(isPregnant){
                    resolve("孩子他爹");
                }else{
                    resolve("老公")
                }
          })
          promise
            .then(name=>{
              console.log(`男人成为了${name}`);
          }).catch(name=>{
              console.log(`男人成为了${name}`); 
          }).finally(()=>{
              console.log("男人和女人最终结婚了");
          })
    </script>
  • 下面是一个图片的异步加载过程,当图片加载成功时执行resolve方法,将图片渲染到页面,加载失败时reject方法,输出加载错误。
  <script>
        let imgUrl = "https://ts1.cn.mm.bing.net/th/id/R-C.fd7cad22933db9caf2e02f2201cdacdb?rik=gJgWP1TDqA29CA&riu=http%3a%2f%2fimg.zcool.cn%2fcommunity%2f0109d25949e3baa8012193a3fb7c19.gif&ehk=pPVPiyQNUuMbzYgHC7KUMw7JBiep%2bDQKO82vNsJfX0o%3d&risl=&pid=ImgRaw&r=0";
        const imgPromise = (url) => {
            return new Promise((resolve, reject) => {
                const img = new Image();
                img.src = url;
                img.onload = () => {
                    resolve(img);
                }
                img.onerror = () => {
                    reject(new Error("图片有误"));
                }
            })
        }
        imgPromise(imgUrl)
            .then(img => {
                document.body.appendChild(img);
            })
            .catch(err => {
                document.body.innerHTML = err;
            })
    </script>
  1. Promise有几种状态?

  • new Promise但是未执行resolve、reject,状态:pending
  • 执行resolve 状态:fullfilled
  • 执行reject状态:rejected
const promise1 = new Promise((resolve,reject)=>{});
const promise2 = new Promise((resolve,reject)=>{resolve()});
const promise3 = new Promise((resolve,reject)=>{reject()});
console.log(promise1,`promise1`);
console.log(promise2,`promise2`);
console.log(promise3,`promise3`);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GHefBTrg-1678081565404)(D:/typoraImg/image-20230306115820468.png)]

  1. Promise的状态是否可变?

​ 不可变,resolvereject谁先执行,promise的状态就是那个。

  1. Promise如何解决地域回调?

  • 在then返回Promise实例,之后链式调用,来解决回调地狱。

         function request1(){
            return new Promise(resolve=>resolve(1));
         }
         function request2(){
           return new Promise(resolve=>resolve(2));
         }
         function request3(){
           return new Promise(resolve=>resolve(3));
         }
    
         request1().then(v=>{
             console.log(`${v}`);
             return request2();
         }).then(v=>{
             console.log(`${v}`);
             return request3();
         }).then(v=>{
             console.log(`${v}`);
         })
    
  1. Promise有哪些方法?他们的应用场景是什么?(all/race)

  • Promise.all([]) 里面传入数组,会返回一个Promise实例,执行then方法时:
    • 如果都是resolve,那么会按照,传入参数的顺序输出。如下:虽然promise3是最先执行结束的,但是打印出来是[1,2,3];
    • 如果有一个reject,那么立即执行reject,其他的不会支持性,如果有多个reject,只执行最先执行结束的。
            const promise1 = new Promise(resolve=>{
                  setTimeout(()=>{
                     resolve(1);
                  },3000)
            })
            const promise2 = new Promise(resolve=>{
                  setTimeout(()=>{
                    resolve(2);
                  },2000)
            })
            const promise3 = new Promise(resolve=>{
                  setTimeout(()=>{
                     resolve(3);
                  },1000)
            })

            const promiseAll = Promise.all([promise1,promise2,promise3]);
            promiseAll.then(v=>{
                console.log(v);
            }).catch(v=>{
                console.log('catch',v);
            })

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6lKdGTDm-1678081565404)(D:/typoraImg/image-20230306131324825.png)]

  • Promise.race() :谁先执行结束,就执行谁,然后不在执行其他Promise,这里resolvereject优先级相同。
  • Promise.all() 原理解析及使用指南 - 掘金 (juejin.cn)
  • 关于 Promise.all 和 async await 这档子事儿 - 掘金 (juejin.cn)
  1. 如何让Promise顺序执行?(async/await)

            const promise1 = new Promise(resolve=>{
                  setTimeout(()=>{
                     resolve(1);
                  },3000)
            })
            const promise2 = new Promise(resolve=>{
                  setTimeout(()=>{
                    resolve(2);
                  },2000)
            })
            const promise3 = new Promise(resolve=>{
                  setTimeout(()=>{
                     resolve(3);
                  },1000)
            })
            
            async function execute(){
                  await promise1.then(v=>console.log(v));
                  await promise2.then(v=>console.log(v));
                  await promise3.then(v=>console.log(v));
            }
            execute();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文速递】CASE 2022 - EventGraph: 将事件抽取当作语义图解析任务

【论文速递】CASE 2022 - EventGraph: 将事件抽取当作语义图解析任务 【论文原文】&#xff1a;https://aclanthology.org/2022.case-1.2.pdf 【作者信息】&#xff1a;Huiling You, David Samuel, Samia Touileb, and Lilja vrelid 论文&#xff1a;https://aclanthology.o…

sql server 对比两个查询性能 ,理解Elapsed Time、CPU Time、Wait Time

分析 SET STATISTICS TIME ONyour sqlSET STATISTICS TIME OFF由上图分析: cpu time 是查询执行时占用的 cpu 时间。如果了解系统的多任务机制&#xff0c;就会知道系统会将整个 cpu 时间分为一个一个时间片&#xff0c;平均分配给运行的线程——一个线程在 cpu 上运行一段时间…

《PyTorch深度学习实践9》——卷积神经网络-高级篇(Advanced-Convolution Neural Network)

一、1∗11*11∗1卷积 由下面两张图&#xff0c;可以看出1∗11*11∗1卷积可以显著降低计算量。 通常1∗11*11∗1卷积还有以下功能&#xff1a; 一是用于信息聚合&#xff0c;同时增加非线性&#xff0c;1∗11*11∗1卷积可以看作是对所有通道的信息进行线性加权&…

Air101|Air103|Air105|Air780E|ESP32C3|ESP32S3|Air32F103开发板:概述及PinOut

1、合宙Air101&#xff08;芯片及开发板&#xff09; 合宙Air101是一款QFN32 封装&#xff0c;4mm x 4mm 大小的mcu。通用串口波特率&#xff0c;设置波特率为921600。 ​ 管脚映射表 GPIO编号 命名 默认功能及扩展功能 0 PA0 BOOT 1 PA1 I2C_SCL/ADC0 4 PA4 I2C_S…

前端必备技术之——AJAX

简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML(现在已经基本被json取代)。通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组…

揭秘关键一环!数据安全服务大盘点

数据安全服务&#xff0c;数据安全体系建设的关键一环。通过数据安全服务解决数据安全建设难题&#xff0c;得到越来越多的重视。不久前&#xff0c;《工业和信息化部等十六部门关于促进数据安全产业发展的指导意见》发布&#xff0c;明确“壮大数据安全服务”&#xff0c;推进…

VScode 插件【配置】

写这篇博客的原因&#xff1a; vscode 很久以前的插件&#xff0c;忘记是干什么的了记录 vscode 好用的插件 插件介绍&#xff08;正文开始&#xff09; Auto Rename tag 开始/关闭标签内容 同步 Chinese (Simplified) VScode 中文化 CSS Peek 通过 html 代码查找到引用的样式…

Linux - 磁盘I/O性能评估

文章目录概述RAID文件系统与裸设备的对比磁盘I/O性能评判标准常用命令“sar –d”命令组合“iostat –d”命令组合“iostat –x”单独统计某个磁盘的I/O“vmstat –d”命令组合小结概述 RAID 可以根据应用的不同&#xff0c;选择不同的RAID方式 如果一个应用经常有大量的读操…

Flink(Java版)学习

一、Flink流处理简介 1.Flink 是什么 2.为什么要用 Flink 3.流处理的发展和演变 4.Flink 的主要特点 5.Flink vs Spark Streaming 二、快速上手 1.搭建maven工程 2.批处理WordCount 3.流处理WordCount 三、Flink部署 1.Standalone 模式 2.Yarn 模式 3.Kubernetes 部署 四、F…

PyTorch深度学习:60分钟入门

PyTorch深度学习&#xff1a;60分钟入门 本教程的目的: 更高层级地理解PyTorch的Tensor库以及神经网络。训练一个小的神经网络来对图像进行分类。 本教程以您拥有一定的numpy基础的前提下展开 Note: 务必确认您已经安装了 torch 和 torchvision 两个包。 这是一个基于Pytho…

Cannot resolve symbol ‘String‘或Cannot resolve symbol ‘System‘ ——IDEA

IDEA中运行报错&#xff0c;“Cannot resolve symbol ‘String‘”解决方案 ‘System‘解决 参考一&#xff1a;(31条消息) IDEA2021 提示“Cannot resolve symbol ‘String‘”解决方案_idea无法解析符号string_YT20233的博客-CSDN博客https://blog.csdn.net/CNMBZY/article…

docker 的安装与卸载

一 卸载旧版本的 Docker 1.列出系统中已安装的docker包 yum list installed | grep docker 示例 2.卸载docker yum -y remove docker-ce-cli.x86_64 yum -y remove docker-ce.x86_64 yum -y remove containerd.io 示例 二 Docker的安装 1.安装 Docker 所需的依赖&#…

虹科方案| 助力高性能视频存储解决方案-1

虹科电子科技有限公司是ATTO技术公司在中国的官方合作伙伴。依附于我们十多年的客户积累和方案提供经验&#xff0c;虹科与 ATTO共同致力于为数据密集型计算环境提供网络和存储连接以及基础架构解决方案&#xff0c;为客户提供更高性能的产品与服务。无论您的工作流程面临何种挑…

分页插件——PageHelper

文章目录1 分页查询——分页插件&#xff08;PageHelper&#xff09;1.1 概述1.2 代码实现1.2.1 在pom.xml引入依赖1.2.2 Mapper数据访问层实现1.2.3 Service业务逻辑层实现1.2.4 postman测试试2 带条件的分页查询——分页插件&#xff08;PageHelper&#xff09;2.1 需求2.2 代…

ubuntu 20.04安装ROS体验小海龟转圈圈

文章目录前言一、ros安装1、添加ROS软件源&#xff1a;2、添加密钥&#xff1a;3、安装ROS&#xff1a;4、初始化rosdep:5、设置环境变量&#xff1a;6、安装rosinstall二、体验小海龟案例1.键盘控制小海龟&#xff1a;1、新建一个终端运行ros2、新建终端启动小海龟的仿真器3、…

网络资源面经3

文章目录hive 与 mysql 的区别类加载器的种类&#xff0c;有什么机制&#xff0c;机制有何用处MapReduce实现wordcount流程full GC 和 old GC 区别避免频繁的Full GChive 与 mysql 的区别 数据存储位置 hive数据存储在hdfs上&#xff0c;mysql的数据存储在本地磁盘中。数据规模…

自排查Nginx域名失效

静态分离 用户访问域名——>Nginx——>网关——>微服务 问题&#xff1a; 访问域名后发现不能跳转到首页 检查&#xff1a; 1.检测hosts文件 结果&#xff1a;正确配置域名没有发现问题 2.检查Nginx配置&#xff08;Nginx总配置、服务配置&#xff09; Nginx总配置 服…

【需求响应】基于数据驱动的需求响应优化及预测研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

SpringBoot+Vue中使用AES进行加解密(加密模式等对照关系)

场景 若依前后端分离版本地搭建开发环境并运行项目的教程&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_霸道流氓气质的博客-CSDN博客 在上面搭建起来前后端架构之后&#xff0c;在前后端分别进行AES方式的加解密。 AndroidJava中使用Aes对称加密的工具类…

内存泄漏分析及规避方法

啥是内存泄漏&#xff1f;内存泄漏就是堆内存中的某些对象&#xff0c;你虽然不再使用它们了&#xff0c;但是垃圾回收器还回收不了他们&#xff0c;长此以往内存就慢慢耗没了。内存泄漏怎么检测&#xff1f;如果你的服务经常占用内存很大&#xff0c;慢慢隔一段时间需要重启一…