本文参考阮一峰的JavaScript标准参考教程
Promise的状态
Promise
有三种states
(状态):
- 异步操作未完成(
pending
) - 异步操作成功(
fulfilled
) - 异步操作失败(
rejected
)
我们通常将fulfilled
和rejected
称为setled
, 这不是一个状态而是为了语法上的方便这么说的.
Promise
有两种fates
: resolved
, unresolved
关于states
和fates
可以参考这篇文章: states and fates
三种状态的变化途径有两种:
pending
–>fulfilled
pending
–>rejected
一旦状态发生变化, 那么就不会有新的状态变化了.
Promise函数
Promise
构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
。它们是两个函数,由 JavaScript 引擎提供,不用自己实现
Promise
只返回两种结果:
- 异步操作成功, 调用
resolve(value)
方法返回异步操作结果, 作为参数(value
)传递出去, 状态变为fulfilled
- 异步操作失败, 调用
reject(error)
返回操作报出的错误(error
), 作为参数传递出去, 状态变为rejected
promise.prototype.then()
用于添加回调函数, 它接收两个回调函数作为参数.返回一个Promise
对象。若前一个异步操作成功, 则执行第一个回调函数. 若前一个异步操作失败, 则执行第二个回调函数.
var p1 = new Promise(function (resolve, reject) {
resolve('成功');
});
p1.then(console.log, console.error);
// "成功"
var p2 = new Promise(function (resolve, reject) {
reject(new Error('失败'));
});
p2.then(console.log, console.error);
// Error: 失败
- 只要前一个
Promise
返回的是resolve()
那么then
就执行第一个回调函数 - 只要前一个
Promise
返回的是reject()
那么then
就执行第二个回调函数
function fail(value) {
return new Promise(function(resolve, reject) {
console.log('前一个Promise对象为' + value + ',执行fail函数')
resolve('resolve状态')
})
}
function success(value) {
return new Promise(function(resolve, reject) {
console.log('前一个Promise对象为' + value + ',执行success函数')
resolve()
})
}
var p3 = new Promise(function (resolve, reject) {
reject('reject状态')
})
p3.then(null, fail).then(success, null)
//前一个Promise对象为reject状态,执行fail函数
//前一个Promise对象为resolve状态,执行success函数
Promise还有其他函数,以后再做介绍: