promise笔记

1.介绍

之前的异步编程都是回调函数(数据库操作、ajax、定时器、fs读取文件 )

promise是es6异步编程新的解决方案,是一个构造函数

优点:支持链式调用,可以解决回调地狱,可以指定回调函数

2.使用

function getNum(num){return new Promise(()=>{if(num>10){resolve(true)}else{reject(false)})
}getNum().then.(val=>{console.log(val)},result=>{console.log(result)}
)

3.状态

pending

resolved/fulfilled

rejected

 4.方法

4.1then方法

 
var promise = new Promise((resolve, reject) => {console.log("inner Promise"); // 1setTimeout(() => {resolve("Fashion Barry"); // 3}, 1000);
});promise.then((res) => {console.log("res", res);
});
console.log("outer promise"); // 2
// Promise 实际是一个同步函数,then 方法才是异步
// 所以输出顺序如上

4.2 resolve方法

传一个非promise对象的值会成功返回这个值

例如:var p = Promise.resolve('111')

console.log(p) //111

传一个promise对象

4.3 reject方法

无论传什么值都会失败 但是会输出该值

var p = Promise.reject('111')
const p1=Promise.reject(new Promise((resolve,reject)=>{resolve("ok")
}))
console.log(p,p1)

4.4all方法(promises=>{})

promises:包含n个promise的数组

返回一个新的promise,只有所有的promise都成功才成功,有一个失败就直接失败

1.全部为成功状态
2.有一个失败

4.5race方法promises=>{})

promises:包含n个promise的数组

返回一个新的promise,第一个完成的promise的结果状态就是最终的结果状态

 

5.改变promise状态

6.问题

6.1promise设置多个回调(如果状态改变 都会执行)

6.2promise状态和回调谁先执行

  1. 同步执行时 先改变状态后执行回调
  2. 执行函数中是一个异步任务时就先执行回调,再改变状态

6.3如何先改状态再执行回调

1.同步任务

2.延迟再调用then()

6.4返回结果

  1. 如果在成功的回调中throw一个错误 会使promise的状态变为失败
  2. 回调中返回的结果是非promise类型的对象,会返回该值,状态变为成功
  3. 回调中返回的结果是promise类型的对象,返回改promise对象的结果

 6.5如何串联多个任务

 

6.6异常穿透

在最后去处理错误,中间出现了错误,也可以由最后的catch方法处理

6.7中断promise链

只有一个办法:返回一个pending状态的promise

return new Promise(()=>{})

7.async函数

返回结果是promise对象,返回状态由函数内部的return决定

8.await表达式

右侧的表达式一般为promise对象,也可以是其他值

  1. 如果表达式是promise对象,await返回的是promise成功的值
  2. 如果是其他值,直接将该值作为await的返回值

⚠️注意:

  1. await必须写在async函数中 但async函数中可以没有await
  2. 如果await右边的promise失败了会抛出异常,需要通过try...catch处理

 

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

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

相关文章

conda环境查看当前可下载的Django版本

要使用conda查看可用的Django版本,你需要使用conda search命令。以下是如何进行操作的步骤: 打开你的终端。输入以下命令: conda search django运行这个命令后,你将看到一个列表,其中包含了在当前配置的conda源中可用…

Seatunnel-2.3.3 自打包 docker部署(含web)

前言 此篇重点是,自己将源码编译后,将打包文件部署在docker里(也可以直接用官网的) 如果也有人是希望,将自己打包的源码部署了,可以参考可乐的这篇文章,这篇文章详细介绍了2.3.3的serve和web的…

定时任务管理系统详细设计说明书

目录 定时任务管理系统详细设计说明书 1. 概述 2. 系统架构 2.1 技术选型 2.2 系统组件 2.3 安全设计 3. 功能模块设计 3.1 任务查询 3.2 任务创建和修改 3.3 任务暂停和启动 3.4 任务报表导出 4. 数据库设计 4.1 任务表 (tasks) 4.2 任务执行记录表…

SpringCloud之负载均衡Ribbon

Ribbon 是一个客户端负载均衡工具,主要功能是将面向服务的Rest模板(RestTemplate)请求转换成客户端负载均衡的服务调用。通过Ribbon,开发人员可以在客户端实现请求的负载均衡,而无需单独部署负载均衡器。Ribbon支持多…

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层 问题场景: 1.浏览官网示例的时候图层看到大量线数据合并渲染的示例 2.矢量数据较大量级的时候,这种时候怎么在config.json文件中尝试配置呢&#x…

积分管理系统论文

摘  要 随着计算机和网络的不断革新,世界已经进入了前所未有的电子时代。作为实用性强、应用范围广泛的会员管理系统也正在被越来越多的各类企业用于消费管理领域。然而,那些针对性强、企业理念清晰的大型超市也正发展迅速,这些大型超市应该…

软件更新 | TSMaster 2024.04 最新版已上线,来看看新增了哪些实用功能

TSMaster是集汽车总线嵌入式代码生成、监控、仿真、开发、UDS诊断、CCP/XCP标定、ECU刷写、I/O控制、测试测量等功能于一体的国产软件工具。在最新更新的软件版本里,增加了很多新功能,其中期待已久的DoIP诊断功能终于在最新升级版本里可以实现&#xff0…

Redis__数据类型

文章目录 😊 作者:Lion J 💖 主页: https://blog.csdn.net/weixin_69252724 🎉 主题:Redis__数据类型 ⏱️ 创作时间:2024年04月28日 ———————————————— 这里写目录标题 文…

理清STM32的内存(ram)与flash(rom)空间

keil工程变异代码的时候,会有如下输出信息 code:代码机器编译后生成的一系列指令,永远只放在flsah,内存ram不会存在; RO-data:只读常量,永远只放在flash内,存ram不会存在;; RW-dat…

SCP收容物001

注 :本文是特别版,本文只供开玩笑 ,与steve_gqq_MC合作。 --------------------------------------------------------------------------------------------------------------------------------- 前言:我的第一篇文章说过,SC…

【树莓派】yolov5 Lite,目标检测,行人检测入侵报警,摄像头绑定

延续之前的程序: https://qq742971636.blog.csdn.net/article/details/138172400 文章目录 播放声音pygame不出声音怎么办(调节音量)树莓派上的音乐播放器(可选)命令行直接放歌(尝试放mp3歌曲) …

word添加行号

打开页面设置,找到行号

Java设计模式 _创建型模式_工厂模式(普通工厂和抽象工厂)

一、工厂模式 属于Java设计模式创建者模式的一种。在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 二、代码示例 场景:花店有不同的花,通过工厂模式来获取花。 1、普通工厂模式 逻辑步骤&#…

【算法每日一练】

蛮有意思的的一道题,最后要判断能否成为一种1~n的全排列,我最这样做的: 整个数组先排序一下。假设遍历到了i,那就判断前面b和r的个数,但是有想到了后面可能还会对前面的结果产生影响,所以就抛弃了这个想法…

安卓intent+传递Serializable接口

从Mainactivity1传递对象给MainActivity2可以通过Serializable对象。 <?xml version"1.0" encoding"utf-8"?> <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.co…

鸿蒙开发HarmonyOS4.0入门与实践

鸿蒙开发HarmonyOS4.0 配合视频一起食用&#xff0c;效果更佳 课程地址&#xff1a;https://www.bilibili.com/video/BV1Sa4y1Z7B1/ 源码地址&#xff1a;https://gitee.com/szxio/harmonyOS4 准备工作 官网地址 鸿蒙开发者官网&#xff1a;https://developer.huawei.com/con…

纯血鸿蒙APP实战开发——全局状态保留能力弹窗

全局状态保留能力弹窗 介绍 全局状态保留能力弹窗一种很常见的能力&#xff0c;能够保持状态&#xff0c;且支持全局控制显隐状态以及自定义布局。使用效果参考评论组件 效果图预览 使用说明 使用案例参考短视频案例 首先程序入口页对全局弹窗初始化&#xff0c;使用Globa…

高扬程水泵,提升水源新选择!— 恒峰智慧科技

在炎炎夏日&#xff0c;阳光炙烤着大地&#xff0c;森林火灾的发生频率也随之上升。火势猛烈&#xff0c;烟雾弥漫&#xff0c;给森林带来了极大的破坏。为了保护森林资源&#xff0c;我们必须采取有效的措施来扑灭火灾。而在这其中&#xff0c;高扬程水泵成为了提升水源新选择…

笔记:编写程序,绘制一个展示马尾松、樟树、杉木、 桂花 4 个树种不同季节的细根生物量的误差棒图。

文章目录 前言一、分析题目二、什么是误差棒图&#xff1f;二、编写程序总结 前言 编写程序&#xff0c;绘制一个展示马尾松、樟树、杉木、 桂花 4 个树种不同季节的细根生物量的误差棒图&#xff0c;实现过程如下&#xff1a; &#xff08;1&#xff09; 导入 matplotlib.pyp…

【数据结构与算法(C语言)】1. 线性表的顺序存储

文章目录 前言一. 线性表插入和删除1. 元素的插入2. 元素的删除 二. 代码三. 优缺点 前言 线性表的顺序存储结构&#xff0c;指的是用一段地址连续的存储单元依次存储线性表的数据结构 一. 线性表插入和删除 1. 元素的插入 插入位置之后的数据都向后移一位&#xff0c;上图中元…