Promise
promise是异步编程的一种解决方案,简单说是一个容器,封装着一个未来才会发生的事件。Promise是一个对象,可以获取异步操作的消息。
Promise对象特点:
- 对象的状态不受外界影响,Promise对象代表一个异步操作,他有三种状态:pending(进行中),fulfilled(已成功),和rejected(已失败)。只有异步操作的结果才能决定当前是哪一种状态。
- Promise的状态一旦确定就不会再改变,其返回的状态只有成功和失败两种可能。Promise的状态一旦确定,再对Promise添加回调函数会立即得到相应的结果,与事件不同的是,事件的结果一旦错过,再去监听是得不到结果的。
基本使用
Promise构造函数接受一个函数作为参数,该函数两个参数分别是resolve和reject,这两个参数是函数,由javascript引擎提供。
const promise = new Promise(function(resolve,reject){
// do
if(true){
resolve(res);
}else{
reject(err);
}
});
resolve函数将Promise的状态由“未完成”改为“成功”,reject将Promise状态由“未完成”改为“失败”。
接收Promise返回状态:Promise.prototype.then()
const promise = new Promise(function(resolve,reject){
// do
if(true){
resolve(res);
}else{
reject(err);
}
});
promise.then(function(res){},function(err){}); //第一种方式
promise.then(function(res){}).catch(function(err{})); //第二种方式
这里第一种方式then的第一个参数为接收成功状态的函数,其参数为成功状态的返回对象,第二个参数为接收失败状态的函数,其参数为失败状态的返回对象;此时后面使用catch可以捕捉应用程序的错误。
第二种方式then中只有一个接收成功状态的函数,后面使用catch来接收失败的返回结果,程序异常也由catch捕捉。但是第二种方式可以捕捉到then中成功状态代码执行的错误,所以建议使用第二种方式。
finally
finally方法指定一段代码,不管Promise最后状态是什么,这段代码都会执行。
promise.then(res=>{...})
.catch(err=>{...})
.finally(()=>{...});
Promise.all()
const p = Promise([p1,p2,p3]) //p1,p2,p3都是Promise实例
p的状态由p1、p2、p3决定,分成两种情况。
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
Promise.race()
const p = Promise([p1,p2,p3]) //p1,p2,p3都是Promise实例
上面代码中,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。
- sql 表有没有自增列,插入自增列值
- jsp中的JSTL与EL表达式用法及区别(二)
- WPF 给控件添加复制事作
- wpf RoutedUICommand 绑定
- jsp中的JSTL与EL表达式用法及区别(一)
- java线程池模型
- lock小记
- HTML布局的基本要点
- Building a Middle Tier Component using NHibernate and Spring.NET
- Linq 和DefaultView两种方法去掉DataTable 里的重复行
- MySQL事务autocommit自动提交
- wcf webHttpBinding Post 大数据量提交 ios c#客户端
- 你现在还在手动生成set,get方法吗?
- ios 接收 c# socket udp 组播
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单
- 使用 NextCloud + COS 搭建个人网盘
- Shader基础技巧整理
- 隐秘的物理粒子系统与渲染 !Cocos Creator LiquidFun !
- 一起用Gradle Transform API + ASM完成代码织入呀~
- 掩盖浏览痕迹不会被发现的方法【逗】
- webpack实战——样式预处理
- 前端防止浏览器访问旧版 js 和 css 的优化思路
- 少数派实测报告:AI巨无霸模型GPT-3 | 附送API 调用方法「AI核心算法」
- Qt音视频开发19-海康sdk录像存储
- 单元测试在深度学习中的应用 | 附代码「AI产品/工程落地」
- 实现 AOP 的三种方式
- Spring Boot 配置
- 彻底弄懂TCP协议:从三次握手说起
- 各大厂都在考的 Java 集合知识点总结,不来看看???