ES6中Promise的简单理解
Posted rgqjson
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6中Promise的简单理解相关的知识,希望对你有一定的参考价值。
一个函数参数:new Promise(function(resolve, reject))
每个Promise构造函数可接受一个参数,该参数为一个函数,该函数又有两个参数resolve和reject,分别表示为成功之后的回调函数和失败之后的回调函数。
当异步操作执行成功后,会将异步操作结果作为参数传入 resolve 函数并执行,此时 Promise对象状态从 pending 变为 fulfilled ;
失败则会将异步操作的错误作为参数传入 reject 函数并执行,此时 Promise对象状态从pending 变为 rejected
两个状态转换:pending->fulfilled, pending->rejected
从两种状态转换可以看出一个有三种状态,挂起态pending,已成功fulfilled,已失败rejected。状态一旦改变就不会再变。
三个原型方法:.then(), .catch(), .finally()
- .then()方法可提供一个或两个回调函数作为参数。第一个回调函数是Promise对象的状态由pending 变为 resolved 时执行;第二个回调函数则是Promise对象的状态由pending变为rejected 时执行,且第二个参数可选。
Promise.then(function(value){
// success
},function(error){
// failure
})
- .catch()方法提供一个回调函数作为参数,在失败时执行的回调函数。该回调函数的作用等同于.then()方法的第二个参数。以下写法等价。
Promise.then(undefined, function(error){
//failure
})
// 等价于
Promise.catch(function(error){
//failure
})
- .finally()方法,无论结局如何都会执行的回调函数。
四个普通方法:.all(iterable), .race(iterable), .resolve(value), .reject(value)
- .all()方法,iterable参数必须是一个可迭代对象。等所有传入的参数状态由pending->fulfilled时,执行状态为resolve的回调函数,即.then() 方法的第一个函数参数。若iterable中有一个状态变为rejected,则立马执行reject的回调函数。
- .race()方法,iterable参数必须为可迭代对象。第一个状态由pending->rejected或pending->fulfilled触发,触发对应的resolve或reject函数,剩下的可迭代项继续执行,但执行结束后不再执行对应状态的回调函数。
- .resolve()方法,用于返回一个状态为 fulfilled 的Promise对象
- .rejecct()方法,用于返回一个状态为 rejected 的Promise对象
以上是关于ES6中Promise的简单理解的主要内容,如果未能解决你的问题,请参考以下文章