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"); // 1
  setTimeout(() => {
    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.mfbz.cn/a/566813.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd7

安装mamba时报错 检查报错原因: file -i ~/.bashrc file -i ~/.profile发现bashrc的编码不正确 对编码格式进行修改 iconv -f ISO-8859-1 -t UTF-8 ~/.bashrc > ~/.bashrc.utf8 mv ~/.bashrc.utf8 ~/.bashrc cp ~/.bashrc ~/.bashrc.backup执行完指令之后再安…

SAM5916B 法国追梦DREAM 音频DSP芯片

法国追梦/DERAM SAM5504/5704/5716/5808音频DSP芯片,开发板,方案 可用于电子鼓、电子琴、电吉他、效果器、均衡器、啸叫抑制器等电声产品领域 一、全系列芯片: SAM2634 SAM2695 SAM5504B SAM5704B SAM5708B SAM5808B SAM5716B SAM5916B... 二、原厂开发套…

在matplotlib中控制colorbar的长度

在matplotlib中控制colorbar的长度 使用matplotlib绘制带颜色的箭头图,有时想直接把颜色条拿来当比例尺条,就需要控制颜色条的长度。 1. pyplot.colorbar()参数说明 pyplot.colorbar(mappable, ax, cax, **kwargs) mappable是一个ScalarMappble类型的…

【黑马头条】-day12项目部署和发布-jenkins

文章目录 1 持续集成2 软件开发模式2.1 瀑布模式2.2 敏捷开发2.2.1 迭代开发2.2.2 增量开发 3 Jenkins3.1 Jenkins安装3.1.1 导入镜像3.1.2 配置3.1.3 初始化设置 3.2 插件安装3.3 服务器环境准备3.3.1 Docker安装配置3.3.2 Git安装配置3.3.3 Maven安装配置 3.4 Jenkins工具配置…

YoloV8改进策略:卷积改进|DOConv轻量卷积,即插即用|适用各种场景

摘要 本文使用DOConv卷积,替换YoloV8的常规卷积,轻量高效,即插即用!改进方法非常简单。 DO-Conv(Depthwise Over-parameterized Convolutional Layer)是一种深度过参数化的卷积层,用于提高卷…

Win10 搭建 YOLOv8 运行环境(20240423)

一、环境要求 1、Python,版本要求>3.7 2、PyTorch,版本要求>1.7。PyTorch 是一个开源的深度学习平台,为人工智能研究提供了一个灵活的、易于使用的工具集。YOLOv8 是基于 PyTorch 框架实现的,所以需要安装 PyTorch。 3、CUD…

【nginx】nginx启动显示80端口占用问题的解决方案

目录 🌅1. 问题描述 🌊2. 解决方案 🌅1. 问题描述 在启动nginx服务的时候显示内容如下: sudo systemctl status nginx 问题出现原因: 根据日志显示,Nginx 服务启动失败,主要原因是无法绑定…

Ultralytics YOLOv8 英伟达™ Jetson®处理器部署

系列文章目录 前言 本综合指南提供了在英伟达 Jetson设备上部署Ultralytics YOLOv8 的详细攻略。此外,它还展示了性能基准,以证明YOLOv8 在这些小巧而功能强大的设备上的性能。 备注 本指南使用Seeed Studio reComputer J4012进行测试,它基于…

[Vue warn]: useModel() called with prop “xxx“ which is not declared

我们在使用vue3里面的defineModel的时候可能会出现这个问题,原因是我们使用的 kebab-case 形式的属性名,我也不知道是不是vue3设定这个api的时候设置的不支持,我没找到相关文档,不过我们把 kebab-case 的形式改为 驼峰命名法 或者…

【WEB前端2024】开源元宇宙:乔布斯3D纪念馆-第9课-摆件美化

【WEB前端2024】开源元宇宙:乔布斯3D纪念馆-第9课-摆件美化 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&#…

架构师系列-MYSQL调优(七)- 索引单表优化案例

索引单表优化案例 1. 建表 创建表 插入数据 下面是一张用户通讯表的表结构信息,这张表来源于真实企业的实际项目中,有接近500万条数据. CREATE TABLE user_contacts (id INT(11) NOT NULL AUTO_INCREMENT,user_id INT(11) DEFAULT NULL COMMENT 用户标识,mobile VARCHAR(50…

李沐53_语言模型——自学笔记

语言模型 1.预测文本序列出现的概率 2.应用在做预训练模型 3.生成文本,给定前面几个词,不断生成后续文本 4.判断多个序列中哪个更常见 真实数据集的统计 《时光机器》数据集构建词表, 并打印前10个最常用的(频率最高的&…

Zabbix监控系统:基础配置及部署代理服务器

目录 前言 一、自定义监控内容 1、在客户端创建自定义key 2、在服务端验证新建的监控项 3、在web界面创建自定义监控项模版 3.1 创建模版 3.2 创建应用集(用于管理监控项) 3.3 创建监控项 3.4 创建触发器 3.5 创建图形 3.6 将主机与模板关联…

Python | Leetcode Python题解之第43题字符串相乘

题目: 题解: class Solution:def multiply(self, num1: str, num2: str) -> str:if num1 "0" or num2 "0":return "0"m, n len(num1), len(num2)ansArr [0] * (m n)for i in range(m - 1, -1, -1):x int(num1[i…

【技术干货】润石红外额温枪方案芯片功能介绍

手持红外额温枪框图中,以电池采用9V为例,先通过一个高压LDO RS3002 把电池电压转为3V,供整个系统使用,包括为 MCU,背光灯,运放 等器件供电,然后再用一个低功耗LDO RS3236 从3V 降为1.5V&#…

Excel如何计算时间差

HOUR(B1-A1)&"小时 "&MINUTE(B1-A1)&"分钟 "&SECOND(B1-A1)&"秒"

10种常用的JS数组循环及其应用场景

文章的更新路线:JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题(HTML基础知识和CSS基础知识已经更新完毕) 正文 在JavaScript中,数组是一种…

如何在PostgreSQL中实现基于哈希的分区表以及其优势是什么

文章目录 一、基于哈希的分区表实现二、基于哈希的分区表优势 PostgreSQL是一个功能强大的开源关系型数据库管理系统,它支持多种分区策略,包括基于范围的分区、基于列表的分区以及基于哈希的分区。本文将重点讨论如何在PostgreSQL中实现基于哈希的分区表…

青否数字人直播带货源码有哪些功能?

青否数字人直播源码功能如下: 1、青否数字人克隆源码的克隆效果媲美真人 将真人录制的2-6分钟视频上传至克隆端后台,系统便会自动启动自动克隆。3-5小时后,即可生成一个与本人在形象、表情及动作上1:1的数字人。 2、在声音克隆上&…

Vue 3中的ref和toRefs:响应式状态管理利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…
最新文章