Promise方法汇总
关于Promise入门介绍请看之前文章——Promise入门
Promise
是异步编程的一种解决方案: 从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,只有异步操作的结果能决定状态,并且一旦状态发生改变就一直保持不会再变。(这与事件不同,事件的特点是一旦错过,再去监听是没有结果的)
(1)创建Promise对象
Promise
对象,可以将异步操作以同步操作的流程表示,避免回调函数。此外,Promise
对象提供统一的接口,使得控制异步操作更加容易。
缺点:首先,无法取消 ,一旦新建 Promise
立即执行,无法中途取消;其次,如果不设置回调函数,Promise
内部抛出的错误,不会反应到外部;第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
const promise = new Promise(function(resolve, reject) {// ... some codeif (/* 异步操作成功 */){resolve(value);} else {reject(error);}
});Promise.resolve(1).then(function(value){console.log(value); // 打印出1
});
Promise.reject(new Error(“错了”));
(2)Promise方法:then()
then() 接受两个回调函数作为参数。当 Promise
执行的内容符合成功条件时,调用resolve
函数,失败就调用 reject
函数。其中第二个参数可以省略(catch()方法的作用),then
方法返回的是一个新的 Promise
实例,因此可以链式调用。
let promise = new Promise((resolve,reject)=>{//做一些异步操作setTimeout(() => {console.log('执行完成');resolve('我是成功!!');}, 2000);})
})
promise.then((data) => {console.log(data);
})
.then((data) => {console.log(data);
})
(3)Promise方法:catch()
catch() 该方法相当于then
方法的第二个参数,指向reject
的回调函数;还有一个作用是在执行resolve
回调函数时,如果出现错误,抛出异常,不会停止运行,而是进入catch
方法中。
p.then((data) => {console.log('resolved',data);
},(err) => {console.log('rejected',err);}
);
// 上下的等价
p.then((data) => {console.log('resolved',data);
}).catch((err) => {console.log('rejected',err);
});
(4)Promise方法:all()
all()方法可以完成并行任务, 它接收一个数组,数组的每一项都是一个 promise
对象。当数组中所有的 promise
的状态都达到 resolved
的时候,all
方法的状态就会变成 resolved
,如果有一个状态变成了 rejected
,那么 all
方法的状态就会变成 rejected
。
let promise1 = new Promise((resolve,reject)=>{setTimeout(()=>{resolve(1);},2000)
});
let promise2 = new Promise((resolve,reject)=>{setTimeout(()=>{resolve(2);},1000)
});Promise.all([promise1,promise2]).then(res=>{console.log(res); //[1,2]
})
(5)Promise方法:race()
race() 接受的参数也是一个每项都是 promise
的数组,当最先执行完的事件执行完之后,就直接返回该 promise
对象的值。如果第一个 promise
对象状态变成 resolved
,那自身的状态变成了resolved
;反之第一个 promise
变成 rejected
,那自身状态就会变成 rejected
。
let promise1 = new Promise((resolve,reject)=>{setTimeout(()=>{reject(1);},2000)
});
let promise2 = new Promise((resolve,reject)=>{setTimeout(()=>{resolve(2);},1000)
});
Promise.race([promise1,promise2]).then(res=>{console.log(res);//结果:2
},rej=>{console.log(rej)};
)
(6)Promise方法:finally()
finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。
promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
Promise方法汇总相关推荐
- 用python下载文件的若干种方法汇总
压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...
- 二、深度学习数据增强方法汇总
深度学习模型训练数据增强方法汇总 一.随机裁剪 二.RGB-->BGR通道互换 三.仿射变换(缩放) 三.随机旋转 四.对比度调整 五.随机抠图 六.bound box 中心点随机抠图 七.随机 ...
- 特征点匹配+特征检测方法汇总
特征点匹配+特征检测方法汇总 特征提取与匹配---SURF:SIFT:ORB:FAST:Harris角点 匹配方法 匹配函数 1. OpenCV提供了两种Matching方式: • Brute-for ...
- 统计计量 | 统计学中常用的数据分析方法汇总
来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...
- js如何操作表格(常用属性方法汇总)
js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...
- IE问题解决方法汇总
1.发送错误报告 [故障现象]在使用IE浏览网页的过程中,出现"Microsoft Internet Explorer遇到问题需要关闭--"的信息提示.此时,如果单击"发 ...
- winform打开cad图纸_CAD打开图纸的方法汇总
打开文件属于最基本的操作,大家都会,但每个人的习惯不一样,采用的方法也不完全相同,这里简单地将打开文件的各种方法汇总一下. 一.打开(OPEN)命令 这是最基本也是最常用的方法,但调用方法有很多种,可 ...
- js解决异步的方法汇总
js解决异步的方法汇总 参考文章: (1)js解决异步的方法汇总 (2)https://www.cnblogs.com/yunshangwuyou/p/9631914.html 备忘一下.
- ES shard unassigned的解决方法汇总
ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...
最新文章
- asp.net中DataGrid性能测试
- Android Studio创建项目
- bzoj千题计划201:bzoj1820: [JSOI2010]Express Service 快递服务
- SpringBoot入门-基础入门
- php金币格式转换,php 资金格式转换函数_PHP教程
- WinForm高级控件实例--职员信息登记
- pku2060 Taxi Cab Scheme
- CNDS-Markdown之公式编辑(二)
- 百度杯全国网络攻防大赛——初来乍到
- kindle看pdf乱码,Kindle中文乱码问题解决办法
- win10子系统基本备份
- 大中型企业九种资金管理模式
- link和import的区别,src和href的区别,css hark 以及HTML5及css3的新增特性
- 购物足迹功能php,wordpress实现访客足迹功能
- java的round函数加点差_【JAVA】Math.Round()函数常见问题“四舍5入”
- 【LeetCode-SQL每日一练】—— 181. 超过经理收入的员工
- 关于 Linux 中 firewalld 的一些笔记整理
- intel 服务器芯片组 c6,华擎推出C621A WS工作站主板 支持志强W-3300处理器
- 版本控制系统工作模式_繁星漫天_新浪博客
- 常见音视频的编码方式和封装格式
热门文章
- Django框架 之 Form表单和Ajax上传文件
- nodeJS之二进制buffer对象
- Notepad++配置Python运行环境
- Opengl学习笔记——顶点数组
- 很高兴,自己申请到了一个.net的blog
- 图 矩阵 两点间有m的路径 矩阵乘法_代数图论I: 基本理论和无向图的同调
- 如何bat清楚谷歌浏览器缓存_如何解决谷歌浏览器启动页面被篡改?
- linux mac time machine,用 Ubuntu 10.10 构建 Time Machine 备份服务器
- mysql semi sync_MySQL Semisync
- C++自学17:goto