异步编程Promise

文章目录

  • 前言
  • 一、关于 Promise 的理解与使用
    • 1.相关知识补充
      • 区别实例对象和函数对象
      • 同步回调
      • 异步回调
      • Js中的错误(error)和错误处理
    • 2.promise是什么
  • 二、Promise 原理
  • 三、Promise 封装 Ajax
  • 四、async 与 await
  • 总结


前言

在项目中,promise的使用是必不可少的,本文主要记录了异步编程中promise,async 与 await相关知识。


一、关于 Promise 的理解与使用

1.相关知识补充

区别实例对象和函数对象

  • 实例对象:通过 new 创建的对象,称实例对象。
  • 函数对象:将函数作为对象使用时,简称函数对象。

同步回调

  • 立即执行,全部执行完了才结束,不放入回调队列中。
  • 如:数组遍历相关的回调函数(promise的excutor函数)new Promise(executor)

异步回调

  • 不会立即执行,会放入回调队列中,以后执行。
  • 如:定时器回调、Ajax回调、promise 的成功/失败回调。

Js中的错误(error)和错误处理

1.错误类型

  • Error:所有错误的父类型
  • ReferenceError:引用的变量不存在
  • TypeError:数据类型不正确
  • RangeError:数据值不在其所允许的范围内
  • SyntacticError:语法错误

2.错误处理

  • 捕获错误:try{ } catch(){ }
  • 抛出错误:throw error

3.错误对象

  • message 属性:错误相关信息
  • stack属性:记录信息

2.promise是什么

1.简介

  • promise 是一个ES6语法,专门用来解决异步 回调地狱 的问题。
  • promise 规范规定了一种异步编程解决方案的API。规范规定了promise对象的状态和then方法。
  • promise 是一个内置的构造函数,是程序员自己new 调用的。
  • promise 对象用来封装一个异步操作,并可以获取其成功/失败的结果值。

回调地狱

  • 当一个回调函数嵌套一个回调函数的时候,出现一个嵌套结构,嵌套多了就会出现回调地狱的情况。

2.语法

  • Promise.prototype.then 方法
  • new Promise(executor) 构造函数
  • new Promise的时候,传入一个回调函数,它是同步的回调,会立即在主线程上执行,称为executor函数
  • executor 会接收两个参数:resolve, reject
  • (1)调用 resolve,会让promise实例状态变为:成功(fulfilled),同时可以指定成功的 value。
    (2)调用 reject,会让promise实例状态变为:失败(rejected),同时可以指定失败的 reason

const p = new Promise((resolve, reject) => {resolve('ok')})
console.log('@',p)//demo,一般不在控制台输出,

一个 Promise 必然处于以下几种状态之一:

  • pending:初始状态,既没有被兑现,也没有被拒绝。
  • fulfilled:意味着操作成功完成。
  • rejected:意味着操作失败。
const p = new Promise((resolve, reject) => {setTimeout(() => {rejected('test错误信息')resolve('test成功数据');}, 1000);
});p.then(data => console.log('成功', 'resolve', data),//成功data => console.log('失败', 'reject', data)//失败
);// 执行结果
1s后打印 `成功 "resolve" "test成功数据"`

二、Promise 原理

-Promise 对象被创建时,它处于 pending 状态。当异步操作成功完成时,它变为 fulfilled 状态;当异步操作失败时,它变为 rejected 状态。而且一旦状态改变,就不能再改变。
当其中任意一种情况发生时,通过 Promise 的 then 方法串联的处理程序将被调用。如果绑定相应处理程序时 Promise 已经兑现或拒绝,这处理程序将被立即调用,因此在异步操作完成和绑定处理程序之间不存在竞态条件。

如果一个 Promise 已经被兑现或拒绝,即不再处于待定状态,那么则称之为已敲定(settled)。

Promise 提供了统一的 API ,各种异步操作都可以用同样的方法进行处理。这使得代码更加简洁和易于理解。
在这里插入图片描述

三、Promise 封装 Ajax

function fetchData(url) {  return new Promise((resolve, reject) => {  // 创建一个 XMLHttpRequest 对象  let xhr = new XMLHttpRequest();  // 监听请求完成事件  xhr.addEventListener('load', function() {  if (xhr.status === 200) { // 请求成功  // 将返回的数据作为 Promise 的结果  resolve(xhr.responseText);  } else { // 请求失败  // 将错误信息作为 Promise 的结果  reject(new Error(`Request failed with status ${xhr.status}`));  }  });  // 监听请求错误事件  xhr.addEventListener('error', function() {  reject(new Error('Request failed'));  });  // 发送请求  xhr.open('GET', url, true);  xhr.send();  });  
}

四、async 与 await

  • Promise虽然解决了回调地狱问题,但是缺点是有不少的样板代码,并且写代码时候还是通过then注册回调方式

  • async、await是语法糖,async 和 await 关键字让我们可以用一种更简洁的方式写出基于 Promise 的异步行为。


总结

  1. promise 常用语法:Promise.prototype.then、new Promise(executor)
  2. promise 三种状态:pending、resolve、 reject

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

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

相关文章

Easyrecovery2024手机版文件数据恢复软件

Easyrecovery是著名数据恢复厂商Kroll Ontrack推出文件的恢复软件,因病毒、误删、U盘故障等问题导致的word/excel/ppt/照片等文件丢失的情况,Easyrecovery能做到较高的恢复成功率!Easyrecovery是全球著名数据恢复厂商Kroll Ontrack推出的文件…

.Net Attribute 什么是特性、预定义特性使用(一)

什么是特性? 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面…

Git报错x509: certificate signed by unknown authority

下载报错: Error downloading object: model-00001-of-00008.safetensors (ed3ac49): Smudge error: Error downloading model-00001-of-00008.safetensors (ed3ac4983f682a999b0e4b6f072aad294c4fd9a7e968e90835ba5c4b466d3c7c): LFS: Get https://cdn-lfs.huggin…

【matlab】绘制横状单组渐变柱状图

% matlab绘制横状渐变柱状图 clear;clc;close all; x1:20; a[1 -1 2 -2 3 -3 4 -4 5 -5 6 -6 7 -7 8 -8 9 -9 10 -10]; close all; b0.8; figure barh(a,b,‘FaceColor’,‘none’) % 颜色包 cmap load(‘D:\matlab_work\函数名为colormore的颜色索引表制作\colormore_txt\colo…

Redis-网络模型

参考资料 :极客时间 Redis(亚风) 前置知识 系统隔离 为了避免⽤户应⽤导致冲突甚⾄内核崩溃,⽤户应⽤与内核是分离的: 进程的寻址空间会划分为两部分:内核空间、⽤户空间 • ⽤户空间只能执⾏受限的命令&…

Linux笔记---系统信息

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 前言 命令 1. uname - 显示系统信息 2. hostname - 显示或设置系统主机名 3. top - 显示系统资源使用情况 4. df - 显示磁盘空间使用情…

【2023 英特尔On技术创新大会直播 |我与英特尔的初次相遇】—— AIPC探索下一代的物联网时代

🌈个人主页: Aileen_0v0 🔥系列专栏:英特尔技术学习专栏 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 硅谷经济的发展与挑战 Intel开发者云与AI技术的应用 AI压缩技术的发展与应用 英特尔与阿里巴巴在AI领域的合作 AIPC时代的…

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候,有投递简历功能,有投递就会有随之而来的查看简历对吧,我投递过的简历,另存为一个文件夹,就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹,用于存放PDF&#x…

重新配置torch1.8 cuda11.1 torchtext0.9.0虚拟Pytorch开发环境

这里写目录标题 起因发现选择安装cuda 11.1核对下自己的显卡是否支持下载该版本的CUDACUDA下载地址CUDA安装过程 在anaconda中创建一个虚拟环境1.以下是环境的配置过程2.查看虚拟环境列表3.激活虚拟环境 安装torch和torchtext包的过程1.输入下面这句代码,就可以直接…

韩语中的一次多用-柯桥基础韩语学习

1.动词,写 일기를 쓰다 写日记 2.动词,戴(帽子,眼镜,口罩) 안경을 쓰다 戴眼镜 3.动词,使用(材料,道具,手段) 세제를 쓰다 使用洗剂 4.动词&am…

大创项目推荐 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 🔥 优质竞赛项目系列,今天…

Ethernet/IP 之IO 连接简要记录

IO连接 EIP的IO连接提供了在一个生产者和多个消费者之间的特定的通信路径,以达到IO数据在IO连接下传输。 生产者对象产生IO数据通过生产者IO连接管理者对象将连接ID和数据组帧发送给消费者IO连接管理者对象然后将IO数据发送给消费者对象。 显示消息连接 显式消息传…

《信息安全工程师教材》-蒋建春、信息安全完全参考手册-Mark Rhodes Ousley、CISSP官方学习指南第九版、ISO27002学习

文章目录 介绍关系学习顺序重复内容学习方法建议学习时间可能重合的部分更详细的学习计划 介绍 《信息安全工程师教材》- 蒋建春:这本教材可能是针对中国地区信息安全工程师的认证考试而编写的,它可能会涵盖信息安全的基本概念、技术和政策,特…

【点选验证码识别】某招标网站反爬虫分析与验证码自动识别

文章目录 1. 写在前面2. 风控描述3. 验证码裁剪4. 验证码识别 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣…

winlator模拟器汉化版是款功能非常强大的安卓游戏模拟器。

winlator模拟器 可以支持玩家在手机上运行各种经典游戏,拥有强大的兼容性,不同芯片、系统和手机都可以完美的运行。进入软件后,可以对显卡配置等进行改变,有利于帮助运行较新的游戏,同时也能够跳过配置检查。相比于其…

ssm基于javaweb的疫情管理系统的设计与实现+vue论文

摘 要 针对于疫情信息管理方面的不规范,容错率低,管理人员处理数据费工费时,采用新开发的疫情管理系统可以从根源上规范整个数据处理流程的正规性和合法性。 疫情管理系统实现的功能包括健康打卡管理,返校申请管理,留…

【Vulnhub 靶场】【DarkHole: 1】【简单】【20210730】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/darkhole-1,724/ 靶场下载:https://download.vulnhub.com/darkhole/DarkHole.zip 靶场难度:简单 发布日期:2021年07月18日 文件大小:2.9 GB 靶场作者&#xff1a…

新手一键重装系统Win11详细教程

Win11系统如果出现了重大问题,无法通过简单的操作解决,那么我们就可以直接选择重新安装正常的操作系统。作为新手用户,对于装机过程不是很了解,那么可以参考下面小编分享的一键重新安装系统Win11的详细教程步骤,轻轻松…

第80讲:GTID全局事务标识符的基本概念以及在Binlog中应用GTID

文章目录 1.GTID的基本概念1.1.为什么要引入GTID1.2.什么是GTID 2.开启GTID全局事务标识符的功能3.模拟产生Binlog日志观察开启GTID功能的区别3.1.模拟产生Binlog日志3.2.观察Binlog日志中的事件信息3.2.观察节点状态有什么变化3.3.观察Binlog日志会有什么变化 4.使用GTID来截取…

HuggingFace下载模型

目录 方式一:网页下载 方式二:Git下载 方式一:网页下载 方式二:Git下载 有些模型的使用方法页面会写git clone的地址,有些没写,直接复制网页地址即可 网页地址: ​https://huggingface.co/…