promise笔记

news2024/11/16 3:45:18

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.coloradmin.cn/o/1616479.html

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

相关文章

Dubbo 和 Spring Cloud 的区别

根据微服务架构在各方面的要素,看看 Spring Cloud 和 Dubbo 都提供了哪些支持。 使用 Dubbo 构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心…

Spring Kafka—— KafkaListenerEndpointRegistry 隐式注册分析

由于我想在项目中实现基于 Spring kafka 动态连接 Kafka 服务,指定监听 Topic 并控制消费程序的启动和停止这样一个功能,所以就大概的了解了一下 Spring Kafka 的几个重要的类的概念,内容如下: ConsumerFactory 作用:…

探索数学语言模型的前沿进展——人工智能在数学教育和研究中的应用

数学一直被认为是科学的基石,对于推动技术进步和解决现实世界问题具有重要意义。然而,传统的数学问题解决方式正面临着数字化转型的挑战。MLMs的出现,预示着数学学习和研究方式的一次革命。 MLMs,包括预训练语言模型(…

STM32F1串口

文章目录 1 数据通信的基础概念1.11.21.31.41.5 2 串口(RS-232)2.12.22.32.42.5 3 STM32的USART3.13.23.33.53.9 USART寄存器介绍 4 HAL库外设初始化MSP回调机制5 HAL库中断回调机制6 USART/UART异步通信配置步骤 (包括HAL库相关函数)6.16.26…

SDN基础知识

🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏&#xff1…

SQLite的DBSTAT 虚拟表(三十六)

返回:SQLite—系列文章目录 上一篇:SQLite运行时可加载扩展(三十五) 下一篇:SQLite—系列文章目录 1. 概述 DBSTAT 虚拟表是一个只读的同名虚拟表,返回 有关用于存储内容的磁盘空间量的信息 的 SQLite 数据库。 示例用例…

【数据结构(邓俊辉)学习笔记】绪论03——递归分析

文章目录 意图目标1. 线性递归数组求和线性递归减而治之 2. 递归分析递归跟踪递推方程典型递推方程 3. 递归模式多递归基多向递归 4. 递归消除空间成本尾递归及其消除 5. 二分递归分而治之数组求和 6 . 效率7. 算法设计优化总结前n项计算算法 意图 数据结构中经常用到递归&…

VScode配置MySQL

1、进入官网,下载MySQL 地址:dev.mysql.com/downloads/mysql/ ZIP方式下载,选择本地的路径进行解压。 2、配置环境变量 形如下方的路径: D:\software\Mysql\mysql-8.3.0-winx64\bin 即是解压位置后文件夹下的bin文件路径 3、初…

在 VSCode 中运行 C#

文章目录 1.为何选择VSCode而不是VS2.操作步骤2.1 安装.NET2.2 安装扩展插件2.2.1 C#2.2.2 Code Runner 3.新建工程HelloCsharp 1.为何选择VSCode而不是VS VS实在是太“重”了,如果只是写一些简单控制台程序进行调试,则完全没必要 2.操作步骤 2.1 安装…

【前端】vue3树形组件使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、树形组件简介二、树形组件使用三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人学习使用vue前端工具,本文主要是…

第十、十一章 折线图 + 地图 + 柱状图的绘制

第十章 折线图的绘制 官网:pyecharts - A Python Echarts Plotting Library built with love. 画廊官网:Document 懒人工具:懒人工具-手机APP工具下载-手机软件下载大全 - 173软件站 (ab173.com) 导学 json 定义 (1&#xff…

Flask 数据库前后端交互案例-1

Flask 数据库前后端交互案例 目录结构templates目录base.htmlheader.htmlleft.html首页职员管理页面添加员工界面员工编辑页面员工详情界面 后台main.pyapp.pymodels.pyviews.py 数据库数据position.sqlperson.sqlpermission.sqldepartment.sql 目录结构 静态文件链接&#xff…

工装行业项目管理系统哪家好?找企智汇工程项目管理系统!

在工装行业,项目管理是至关重要的一环。好的项目管理系统能够提高工装企业的效率、降低成本、提升客户满意度。在这个竞争激烈的市场中,选择一款好的项目管理系统,对于企业的发展至关重要。 今天,我向大家介绍的是企智汇工程项目…

uniapp自定义顶部导航栏

首先uniapp获取设备信息:uni.getSystemInfo或uni.getSystemInfoSync,可用于设置顶部安全区 留一个设备安全区的位置哦 然后在pages.json文件里配置自定义导航栏 {"pages": [ //pages数组中第一项表示应用启动页,参考&#xff1a…

如何使用 ArcGIS Pro 快速为黑白地图配色

对于某些拍摄时间比较久远的地图,限于当时的技术水平只有黑白的地图,针对这种情况,我们可以通过现在的地图为该地图进行配色,这里为大家讲解一下操作方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微…

windows SDK编程 --- 消息(3)

前置知识 一、消息的分类 1. 鼠标消息 处理与鼠标交互相关的事件,比如移动、点击和滚动等。例如: WM_MOUSEMOVE: 当鼠标在窗口客户区内移动时发送。WM_LBUTTONDOWN: 当用户按下鼠标左键时发送。WM_LBUTTONUP: 当用户释放鼠标左键时发送。WM_RBUTTOND…

Cisco NX-OS Software Release 10.4(3)F - 网络操作系统软件

Cisco NX-OS Software Release 10.4(3)F - 网络操作系统软件 NX-OS 网络操作系统 请访问原文链接:Cisco NX-OS Software Release 10.4(3)F - 网络操作系统软件,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Cisc…

K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

Ingress对象 1 )概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTPIngress-nginx 本质是网关,当你请求 abc.com/service/a, Ingress 就把对应的地址转发给你,底层运行了一个 nginx但 K8s 为什么不…

通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验

通义灵码自成功入职阿里云后,其智能编程助手的角色除了服务于阿里云内部几万开发者,如今进一步服务函数计算 FC 产品开发者。近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中&a…

yolov5 的几个问题,讲的比较清楚

yolov5, 几个问题 【BCELoss】pytorch中的BCELoss理解 三个损失函数原理讲解 https://zhuanlan.zhihu.com/p/458597638 yolov5源码解析–输出 YOLOv5系列(十) 解析损失部分loss(详尽) 1、输入数据是 xywh, 针对原图的, 然后,变成 0-1, x/原图w, y/原图h, w/原图w, h/原图h,…