es6基础回顾--Promise
来源:互联网 发布:经典小说推荐 知乎 编辑:程序博客网 时间:2024/06/14 03:24
从我理解来说,Promise解决回调地狱,不会在ajax里面无休止的调用ajax了。
Promise是一个对象,从其中可以获取异步操作的消息。
Promise对象的状态不受外界影响,其代表一个异步操作,有三种状态:Pending(进行中),Resolved(已完成),Rejected(已失败)。一旦状态改变就不会再变。
生成Promise实例对象基本用法:
var promise = new Promise(function(resolve,reject){ if(/*异步操作成功*/){ //比如ajax操作 resolve(value) }else{ reject(error) } })
resolve函数的作用是将Promise对象的状态从Pending变为Resolved,在异步操作成功时调用,并将异步操作的结果作为参数传递出去。
reject函数的作用是将Promise对象的状态从Pending变为Rejected,在异步操作失败时调用,并将异步操作的报错作为参数传递出去。
Promise实例生成后就可以用then方法,接受两个参数,分别指定Resolved状态和Reject状态的回调函数。第二个函数可选。
function test() { return new Promise((resolve,reject)=>{ $.ajax({ url:xxx, context:xxx, success:function(value){ resolve(value) //成功时用resolve }, error:function(mes){ reject(mes) //失败时用reject } }) }) } test.then((value)=>{ console.log(value); //接受resolve返回的数据 },(mes)=>{ console.log(mes); //接受reject返回的数据 })
Promise.prototype.then()
then方法返回的是一个新的Promise实例。因此可以采用链式写法,then方法后再调用另一个then方法。
test.then(()=>{ return xxx; }).then(()=>{ //... })
Promise.prototype.catch()
catch方法是then(null,rejection)的别名,用于指定发生错误时的回调函数。
test.then(()={ //... }).catch(function(){ //处理 getJSON 和 前一个回调函数运行时发生的错误 })
如果异步操作抛出错误,状态会变为Rejected,会调用catch方法指定的回调函数处理这个错误。catch返回的还是一个Promise对象,后面还可以接着调用then方法。
Promise.all()
用于将多个Promise实例包装成一个新的Promise实例。
var p = Promise.all([p1,p2,p3]);
只有p1,p2,p3的状态都变成fulfilled,p的状态才会变成fulfilled。此时p1,p2,p3的返回值组成一个数组,传递给p的回调函数。
只要p1,p2,p3中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值会传递给p的回调函数。
Promise.race()
同样也是讲多个Promise实例包装成一个新的Promise实例。
var p = Promise.race([p1,p2,p3]);
只要p1,p2,p3中有一个实例率先改变状态,p的状态就跟着改变。率先改变的Promise实例的返回值传递给p的回调函数。
Promise.resolve()
将现有对象转换成Promise对象。
var jsPromise = Promise.resolve($.ajax('/whatever.json'));
Promise.reject()
Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected
var p = Promise.reject('出错了');// 等同于var p = new Promise((resolve, reject) => reject('出错了'))
- es6基础回顾--Promise
- es6基础回顾--解构赋值
- es6基础回顾--Generator函数
- es6基础回顾--async函数
- ES6基础之详解Promise基本用法
- ES6--Promise
- ES6 Promise
- ES6-Promise
- ES6 Promise
- ES6 Promise
- es6 promise
- Promise ES6
- ES6 Promise
- ES6--promise
- ES6: Promise
- ES6 Promise
- es6 Promise
- 【ES6】Promise
- 2-RabbitMQ的工作队列
- 数据结构——栈的建立
- applicationId和packageName,以及在Manifest中使用${applicationId}写法
- JAVA.Study.Note.初识JAVA
- MySQL 中的数据类型介绍
- es6基础回顾--Promise
- 详解 Java 定时任务
- 深度学习文章4:计算图像数据集的均值
- 分布式架构学习之持续集成:012--Hudson(Jekins)持续集成服务器的安装、配置和使用
- 分享Centos6.5升级glibc过程
- 火狐下载链接超时,调整默认时长
- iOS证书说明
- Mac vim操作
- Linux下Tomcat的安装和部署