Promise对象

本文参考阮一峰的JavaScript标准参考教程

Promise的状态

Promise有三种states(状态):

  1. 异步操作未完成(pending
  2. 异步操作成功(fulfilled
  3. 异步操作失败(rejected

我们通常将fulfilledrejected称为setled, 这不是一个状态而是为了语法上的方便这么说的.
Promise有两种fates: resolved, unresolved
关于statesfates可以参考这篇文章: states and fates

三种状态的变化途径有两种:

  • pending–>fulfilled
  • pending–>rejected

一旦状态发生变化, 那么就不会有新的状态变化了.

Promise函数

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolvereject。它们是两个函数,由 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还有其他函数,以后再做介绍:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值