#Js篇:Promise

定义

Promise是异步操作解决方案,为异步操作提供统一接口。

Promise英文意思是“承诺”,表示其他手段无法改变。

返回

所有异步任务都返回一个Promise实例。

Promise实例有一个then方法,用于指定下一步的回调函数。

状态

异步操作未完成 pending(进行中)

异步操作成功 fulfilled(已完成)

异步操作失败 rejected(已失败)

  • 从“未完成”到“成功”
  • 从“未完成”到“失败”

优点

可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。

缺点

无法取消Promise,一旦新建它就会立即执行,无法中途取消。

如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。

当处于pending状态是,无法得知目前进展到哪一阶段。

基本用法

ES6规定,Promise对象是一个构造函数,用来生成Promsise实例。

const promise = new Promise((resolve,reject) => {if (/* 异步操作成功 */) {resolve(value)} else {reject(error)}
})

resolve函数作用是,将Promise对象的状态从“未完成”变为“成功”----pending到resolved

Reject函数作用是,将Promise从“未完成”变成“失败”

—pending到rejected

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

function timeout(ms) {return new Promise((resolve, reject) => {setTimeout(resolve, ms, 'done');});
}timeout(100).then((value) => {console.log(value);
});

下面是异步加载图片的例子

function loadImageAsync(url) {return new Promise(function(resolve, reject) {const image = new Image();image.onload = function() {resolve(image);};image.onerror = function() {reject(new Error('Could not load image at ' + url));};image.src = url;});
}

Promise.prototype.then()

作用是为Promise实例添加状态改变时的回调函数。

返回: t hen方法返回一个新的Promise实例。

Promise.prototype.catch()

指定发生错误时的回调函数

getJSON('/posts.json').then(function(posts) {// ...
}).catch(function(error) {// 处理 getJSON 和 前一个回调函数运行时发生的错误console.log('发生错误!', error);
});

如果状态变为resolve则调用**then()**方法执行的回调函数;

如果异步操作抛出错误,状态就会变味rejected则会调用catch()方法指定的回调函数,处理这个错误。

Promise.prototype.finally()

指定不管Promise对象最后状态如何,都会执行的操作。

Promise.all()

定义

用于将多个Promise实例,包装成一个新的Promise实例。

const p = Promise.all([p1, p2, p3]);
特点
  1. p1p2p3都是 Promise 实例
  2. 如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为 Promise 实例,再进一步处理。

p的状态由p1 p2 p3决定

  1. 3种都变成fulfilled, === p变成fulfilled;
  2. 3种中有一个变成rejected,====p变成fulfilled

Promise.all()方法只适合所有异步操作都成功的情况,如果有一个操作失败,就无法满足要求。

Promise.race()

定义

将多个Promise实例,包装成一个新的Promise实例。

特点

p的状态

只要p1 p2 p3之中有一个实例率先改变状态,p的状态就跟着改变。

只要有一个 Promise 对象率先解决或拒绝,整个 Promise.race() 就会解决或拒绝。

Promise.allSettled()

定义

只有等到参数数组的所有 Promise 对象都发生状态变更(不管是fulfilled还是rejected),返回的 Promise 对象才会发生状态变更。

const promises = [fetch('/api-1'),fetch('/api-2'),fetch('/api-3'),
];await Promise.allSettled(promises);
removeLoadingIndicator();

上面示例中,数组promises包含的三个请求,只有等到三个请求都结束了,removeLoadingIndicator()才会执行。

== 用于获取多个Promise对象的最终状态和结果==

== 而 Promise.finally()用于在Promise最终解决或拒绝时执行一段逻辑 ==

Promise.any()

特点
  1. 只要参数实例一个变成fulfilled–成功状态,包装对象就会变成fulfilled—成功状态
  2. 如果所有参数实例都变成rejected状态,包装对象实例就会变成rejected状态

Promise.resolve()

定义

需要将现有对象转为Promise对象

Promise.reject()

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

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

相关文章

一个简易的URL爬虫程序(java)

该程序是一个简单的Java程序,用于从指定的URL中获取网页内容并保存到本地文件。通过URL类打开指定的URL链接,并使用openStream()方法获取输入流。然后使用Scanner类读取输入流中的内容,并使用PrintWriter类将读取到的内容写入到本地文件中。 …

HTTP协议发展

HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) 每一代HTTP解决了什么问题? 下图说明了主要功能。 HTTP 1.0 于 1996 年最终确定并完整记录。对同一服务器的每个请求都需要单独的 TCP 连接。 HTTP 1.1 于 1997 年发布。TCP 连接可以保持打开状态…

php使用Session实现简单购物车功能

一个简单的商城购物车功能。它使用了PHP的会话(Session)来存储购物车数据,通过调用不同的函数来实现添加商品、移除商品、更新商品数量以及清空购物车的功能 session_start();// 初始化购物车 if (!isset($_SESSION[cart])) {$_SESSION[cart] array(); }// 添加商品…

openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态

文章目录 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态132.1 背景信息132.2 前提条件132.3 操作步骤132.4 参数说明132.5 示例 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态 132.1 背景信息 openGauss支持查看整个openGauss的状态&#…

如何在Linux系统安装Nginx并启动

Nginx的介绍 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。官网:nginx newsNginx的下载 前往…

docker基础学习笔记

文章目录 Docker简介Linux下安装DockerDocker常用命令Docker网络Docker存储docker-composedockerfile制作镜像私有仓库镜像导入导出参考 Docker简介 定义:Docker是一个开源的应用容器引擎优势: 一键部署,开箱即用:容器使用基于im…

Qt5.15.2静态编译 VS2017 with static OpenSSL

几年前编译过一次Qt静态库:VS2015编译Qt5.7.0生成支持XP的静态库,再次编译,毫无压力。 一.环境 系统:Windows 10 专业版 64位 编译器:visual studio 2017 第三方工具:perl,ruby和python python用最新的3.x.x版本也是可以的 这三个工具都需要添加到环境变量,安装时勾选…

057-第三代软件开发-文件监视器

第三代软件开发-文件监视器 文章目录 第三代软件开发-文件监视器项目介绍文件监视器实现原理关于 QFileSystemWatcher实现代码 关键字: Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML&…

在使用微信或者支付宝支付的时候,为什么微信支付或者支付宝支付的异步通知商户支付结果要进行验签?

在使用微信支付或支付宝支付等第三方支付平台时,异步通知是一种常见的机制,用于通知商户支付结果或交易状态的变化。验签(Signature Verification)是为了确保异步通知的安全性和完整性而进行的重要步骤。以下是为什么要进行验签的…

人工智能时代的内容写作

内容不再只是王道,正如俗话所说:它是一种流动的货币,推动了巨大的在线信息和影响力经济。 每个品牌都是一个故事,通过其服务和商品讲述自己。尽管如此,大多数客户还是会通过您的在线内容最了解您。 但随着我们进入人…

每日一题:LeetCode-LCR 143.子结构判断

每日一题系列(day 05) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…

汇编:关于栈的知识

1.入栈和出栈指令 2. SS与SP 3. 入栈与出栈 3.1 执行push ax ↑↑ 3.2 执行pop ax ↓↓ 3.3 栈顶超界的问题 4. 寄存器赋值 基于8086CPU编程时,可以将一段内存当作栈来使用。一个栈段最大可以设为64KB(0-FFFFH)。 1.入栈和出栈指令…

C语言——函数

导读 : 这篇文章主要讲解一下C语言函数的一些基本知识。 前言:函数的概念 C语言中的函数又常常被称为子程序,是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术,类比模块化建房子的过程:整个程序…

高校大学校园后勤移动报修系统 微信小程序uniapp+vue

本文主要是针对线下校园后勤移动报修传统管理方式中管理不便与效率低的缺点,将电子商务和计算机技术结合起来,开发出管理便捷,效率高的基于app的大学校园后勤移动报修app。该系统、操作简单、界面友好、易于管理和维护;而且对后勤…

3-Python与设计模式--简单工厂模式

2-Python与设计模式–简单工厂模式 一、快餐点餐系统 想必大家一定见过类似于麦当劳自助点餐台一类的点餐系统吧。在一个大的触摸显示屏上, 有三类可以选择的上餐品: 汉堡等主餐、小食、饮料。当我们选择好自己需要的食物,支付完成后&#…

Python中类的定义和使用细讲

文章目录 前言一、定义类二、创建类的实例三、创建 _ _ init _ _() 方法四、创建类的成员并访问1. 创建实例方法并访问2. 创建数据成员并访问 五、访问限制 前言 在 Python 中,类表示具有相同属性和方法的对象的集合。在使用类时,需要先定义类&#xff0…

expdp及impdp中的exclude及include参数

expdp 及imdpd命令中,exclude及include参数还是有一些要注意的地方,特别是涉及选择性条件时。 一、通用 1、exclude及include参数不能同时使用,这两个是相互排斥的。 2、在parfile参数文件中,可以同时用多个exclude参数&#xf…

Android安卓设置跳转默认应用商店为Google Play 链接跳转到谷歌商店临时解决方法

手机链接默认不跳转 Google Play 因为大部分安卓厂商系统都根据了自己的需求进行了修改,就成为了系统级导流,想要彻底解除可刷写国际版等原生系统即可恢复 解决方法 使用冻结软件(例如 爱玩机手机助手(root)等应用)对 应用商城 进行临时冻结,如需保证正常使用解除冻结状态即可…

WIFI模块(esp-01s)获取网络时间代码实现

目录 前言: 一、串口程序的编写 1、串口重定向 2、回调函数 二、WiFi模块发送AT指令 esp01s.c esp01s.h 三、数据处理 初始化 1、cjson的使用 2、字符串提取有用信息 3、转成标准时间 4.任务处理 前言: 前面讲解了使用AT指令获取网络时间与…

axios初入门

1,axiox的基本使用 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.…