关于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方法汇总相关推荐

  1. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  2. 二、深度学习数据增强方法汇总

    深度学习模型训练数据增强方法汇总 一.随机裁剪 二.RGB-->BGR通道互换 三.仿射变换(缩放) 三.随机旋转 四.对比度调整 五.随机抠图 六.bound box 中心点随机抠图 七.随机 ...

  3. 特征点匹配+特征检测方法汇总

    特征点匹配+特征检测方法汇总 特征提取与匹配---SURF:SIFT:ORB:FAST:Harris角点 匹配方法 匹配函数 1. OpenCV提供了两种Matching方式: • Brute-for ...

  4. 统计计量 | 统计学中常用的数据分析方法汇总

    来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...

  5. js如何操作表格(常用属性方法汇总)

    js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...

  6. IE问题解决方法汇总

    1.发送错误报告 [故障现象]在使用IE浏览网页的过程中,出现"Microsoft Internet Explorer遇到问题需要关闭--"的信息提示.此时,如果单击"发 ...

  7. winform打开cad图纸_CAD打开图纸的方法汇总

    打开文件属于最基本的操作,大家都会,但每个人的习惯不一样,采用的方法也不完全相同,这里简单地将打开文件的各种方法汇总一下. 一.打开(OPEN)命令 这是最基本也是最常用的方法,但调用方法有很多种,可 ...

  8. js解决异步的方法汇总

    js解决异步的方法汇总 参考文章: (1)js解决异步的方法汇总 (2)https://www.cnblogs.com/yunshangwuyou/p/9631914.html 备忘一下.

  9. ES shard unassigned的解决方法汇总

    ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...

最新文章

  1. asp.net中DataGrid性能测试
  2. Android Studio创建项目
  3. bzoj千题计划201:bzoj1820: [JSOI2010]Express Service 快递服务
  4. SpringBoot入门-基础入门
  5. php金币格式转换,php 资金格式转换函数_PHP教程
  6. WinForm高级控件实例--职员信息登记
  7. pku2060 Taxi Cab Scheme
  8. CNDS-Markdown之公式编辑(二)
  9. 百度杯全国网络攻防大赛——初来乍到
  10. kindle看pdf乱码,Kindle中文乱码问题解决办法
  11. win10子系统基本备份
  12. 大中型企业九种资金管理模式
  13. link和import的区别,src和href的区别,css hark 以及HTML5及css3的新增特性
  14. 购物足迹功能php,wordpress实现访客足迹功能
  15. java的round函数加点差_【JAVA】Math.Round()函数常见问题“四舍5入”
  16. 【LeetCode-SQL每日一练】—— 181. 超过经理收入的员工
  17. 关于 Linux 中 firewalld 的一些笔记整理
  18. intel 服务器芯片组 c6,华擎推出C621A WS工作站主板 支持志强W-3300处理器
  19. 版本控制系统工作模式_繁星漫天_新浪博客
  20. 常见音视频的编码方式和封装格式

热门文章

  1. Django框架 之 Form表单和Ajax上传文件
  2. nodeJS之二进制buffer对象
  3. Notepad++配置Python运行环境
  4. Opengl学习笔记——顶点数组
  5. 很高兴,自己申请到了一个.net的blog
  6. 图 矩阵 两点间有m的路径 矩阵乘法_代数图论I: 基本理论和无向图的同调
  7. 如何bat清楚谷歌浏览器缓存_如何解决谷歌浏览器启动页面被篡改?
  8. linux mac time machine,用 Ubuntu 10.10 构建 Time Machine 备份服务器
  9. mysql semi sync_MySQL Semisync
  10. C++自学17:goto