ES6 学习 -- Promise对象
1.promise含义:可以将promise对象看成是一个容器,它保存着未来才会结束的某个事件(一般是异步操作事件)的结果,各
种异步操作都可以用promise对象来处理
promise的特点:
(1)promise对象有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),只有异步操作的结果,可
以决定当前是哪一种状态,其他操作无法改变当前状态
(2)一旦状态值改变,就不会再变了,任何时候都可以得到这个结果。promise对象的状态改变,只有从pending变为
fulfilled和从pending变为rejected两种,状态发生改变之后,就不会再变动
2.promise对象的优缺点:
优点--- 有了promise对象,就可以将异步操作以同步操作的流程表达出来,避免了多层嵌套的回调函数,另外promise对象提
供统一的接口,使得控制异步操作更加容易
缺点:无法取消promise,一旦新建就立即执行,无法取消;如果不设置回调函数,promise内部报错不会反应到外部;当处于
pending状态时,无法得知目前进展到哪个阶段(是刚刚开始还是即将完成)
***解决Promise创建自动执行的办法:将Promise对象在一个函数中定义,当我们调用函数时,才去执行Promise对象
3.promise对象实例用法
function getData() {
// 这里请求后端数据
let p = new Promise(function(resolve, reject) {
if(/* 异步操作成功 */) {
resolve(value); // 请求得到的数据或响应结果
}else {
reject(error); // 请求失败原因
}
})
return p;
};
// 通过Promise构造函数创建实例,该构造函数接收一个匿名函数作为参数,匿名函数的两个参数resolve和reject都
是两个函数。resolve函数的作用是,将Promise对象的状态从“未完成”变成“成功”,在异步操作成功时调用,并作为参数
传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”,在异步操作失败时调用,并将异步操作报
的错作为参数传递出去
getData().
then(function(result) {
console.log(result);
})
.catch(function(error) { // catch()可以在then()出错的时候直接往下执行,不会直接报错然后终止
console.log(error);
})
Promise.prototype.finally() // 不管Promise对象最后状态如何,该方法都会执行
如下:
promise
.then( result => {...}) // 状态值为resolved时执行
.catch( error => {...}) // 状态值为rejected时执行
.finally( ()=> {...}); // 不管如何都会执行
Promise.all() // 将多个Promise实例,包装成一个新的Promise实例,如下:
const p = Promise.all([p1, p2, p3]);
(1)只有p1、p2、p3的状态都变成fulfilled时,p的状态才变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的
回调函数
(2)只要p1、p2、p3中的一个状态为rejected,那么p的状态就变成rejected,此时第一个状态为rejected的实例的返回值,会
传递给p的回调函数
ES6 学习 -- Promise对象的更多相关文章
- ES6的promise对象研究
ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...
- 教你如何使用ES6的Promise对象
教你如何使用ES6的Promise对象 Promise对象,ES6新增的一个全新特性,这个是 ES6中非常重要的一个对象 Promise的设计初衷 首先,我们先一起了解一下,为什么要设计出这么一个玩意 ...
- ES6之Promise对象学习——8个例子学会Promise
目录 Promise 立即执行 Promise 三种状态 Promise 不可逆性 链式调用 Promise.then()回调异步性 Promise中的异常 Promise.resolve() res ...
- ES6的promise对象应该这样用
ES6修补了一位Js修真者诸多的遗憾. 曾几何时,我这个小白从js非阻塞特性的坑中爬出来,当我经历了一些回调丑陋的写法和优化的尝试之后,我深深觉得js对于多线程阻塞式的开发语言而言,可能有着其太明显的 ...
- ES6 - promise对象
Promise的设计初衷 我们使用ajax请求数据,得到数据后再对数据进行操作,可是有时候,对得到的数据进行操作的过程中,可能又要用到ajax请求,这时,我们的代码就变成了这样: $.ajax({ s ...
- ES6中Promise对象个人理解
Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传 ...
- ES6的Promise对象
http://es6.ruanyifeng.com/#docs/promise Promise 对象 Promise 的含义 基本用法 Promise.prototype.then() Promise ...
- 前端知识点回顾之重点篇——ES6的Promise对象
Promise Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异 ...
- 谈谈 ES6 的 Promise 对象
https://segmentfault.com/a/1190000002928371 前言 开篇首先设想一个日常开发常常会遇到的需求:在多个接口异步请求数据,然后利用这些数据来进行一系列的操作.一般 ...
随机推荐
- CSS:CSS 盒子模型
ylbtech-CSS:CSS 盒子模型 1.返回顶部 1. CSS 盒子模型 CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model&quo ...
- ArabellaCPC 2019
链接:http://codeforces.com/gym/102263 A: 签到题:A * B . B: 题意:类似取石子游戏,每个人可以取max(1, n(当前剩余) - k)个,最后取完的人赢, ...
- springboot上传图片大小限制
背景:springboot项目上传图片超过1M报错,经了解,springboot默认上传文件1M 需求:更改默认配置,控制上传文件大小 方法:①更改配置文件(经试验不可行,不知道为什么):②更改启动B ...
- JUC源码分析-线程池篇(一):ThreadPoolExecutor
JUC源码分析-线程池篇(一):ThreadPoolExecutor Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池 ...
- 入门 Webpack,看这篇就够
写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段 ...
- 并发编程之CAS(二)
更多Android架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述CAS: [CAS原理] [CAS带来的ABA问题] 一 ...
- js中常用的正则表达式
我一般对正则的使用方式如下,该方法会返回一个boolean值,然后对这个返回值来进行判断 // 判断是否是整数 function isInt(num) { var reg = new RegExp(& ...
- 2014 ACM-ICPC Vietnam National First Round
Contest Link easy: ABDGIJ medium-easy: E medium: H medium-hard: CF A. Cool number 各数位之和不大,枚举即可. E. B ...
- XML中的值得注意的"坑"
XML严禁 & < ,建议 < > & ' "进行转义 XML中预定义了5个实体引用: < > & ' " 其中,'<' ...
- SpringCloud广告系统随想
广告系统需要两个方面:一个广告投放系统,一个是广告检索系统. 两个系统针对的人群不同: 1.广告投放系统针对的是广告主,他们出资进行广告的投放,将广告的一些数据投放到系统中. 2.广告检索系统针对的是 ...