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 前言 开篇首先设想一个日常开发常常会遇到的需求:在多个接口异步请求数据,然后利用这些数据来进行一系列的操作.一般 ...
随机推荐
- C++——Struct 和 Union区别
1.在存储多个成员信息时,编译器会自动给struct第个成员分配存储空间,struct 可以存储多个成员信息,而Union每个成员会用同一个存储空间,只能存储最后一个成员的信息. 2.都是由多个不同的 ...
- new delete
malloc/free是标准的库函数,而new/delete是操作符 匹配使用原则:malloc(calloc/realloc)和free 以及new/new[] 和delete/delete[]; ...
- HCW 19 Team Round (ICPC format) H Houston, Are You There?(极角排序)
题目链接:http://codeforces.com/gym/102279/problem/H 大致题意: 你在一个定点,你有个长度为R的钩子,有n个东西在其他点处,问你能勾到的东西的数量是多少? 思 ...
- JUC源码分析-集合篇(四)CopyOnWriteArrayList
JUC源码分析-集合篇(四)CopyOnWriteArrayList Copy-On-Write 简称 COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想 ...
- JDK8新特性之函数式接口
什么是函数式接口 先来看看传统的创建线程是怎么写的 Thread t1 = new Thread(new Runnable() { @Override public void run() { Syst ...
- Python中两大神器&exec() &eval()
一.神器1 -- 内置函数eval eval是python中的内置函数,它的作用是将字符串变为所对应的表达式,也相当于一个功能代码加双引号变为字符串,而eval又将字符串转为相应的功能,它在使用过程中 ...
- 伪类checked
困惑了好久的复选框自定义样式终于有了谜底,原来就是一个 :checked 伪类 他的意思就是 匹配任意被勾选/选中的radio(单选按钮),chexked(复选框),或者option(select项) ...
- Neo4j 小调研
一. 概况: 在图计算中,基本的数据结构表达式是:G= ( V,E ),V=vertex( 节点 ),E=edge(边) .图数据库中数据模型主要以节点和关系(边)来体现,也可以处理键值对.数据具有如 ...
- js查询字符串是否包含指定字符的函数indexOf
今天用到了js的函数indexOf来查看字符串中是否包含指定的字符,最开始没注意看,就拿来用了,结果用的时候才发现,IndexOf的返回值原来是字符在字符串中的index,返回值有0.1等等,如果没有 ...
- CAS -- ABA问题的解决方案
我们现在来说什么是ABA问题.假设内存中有一个值为A的变量,存储在地址V中. 此时有三个线程想使用CAS的方式更新这个变量的值,每个线程的执行时间有略微偏差.线程1和线程2已经获取当前值,线程3还未获 ...