JS Promise 的使用
Promise对象用于表示一个异步操作的最终完成(或失败)的返回及其结果值
一个Promise必然处于以下几种状态之一:
- 待定(pending):初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled):意味着操作成功完成。
- 已拒绝(rejected):意味着操作失败。
如图:
![]()
待定状态的Promise对象会被一个值被兑现(fulfilled),要么通过一个原因被拒绝(rejected);
Promise的链式调用
工作中常用到以下三个方法将一个变为已敲定状态的promise关联起来。
- promise.then() 成功调用
- promise.catch() 失败调用
- promise.finaliiy() 成功或者失败都会被调用
下面做一个真实的实例:
let promise = new Promise((resolve,reject) => {
setTimeout(() => {
resolve('唉,又帅了。')
}, 3000)
})
promise.then(res => {
console.log(res)
}).catch(err => {
console.log('成功不会执行这里,但是我还是最帅的。')
}).finally(err => {
console.log('成功或失败都会执行这里,唉,我那该死无处不在的魅力。')
})
Promise.ALL()
1.Promise.all()方法接收一个iterable类型(Arry,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例。
2.输入的resolve回调的结果是一个数组。
3.输入的iterable里没有promise的话,则回调reject,只要一个输入不和法的promise就会抛出错误。
const module = {
x: 42,
y: 39,
getY: function() {
return this.x + this.y
},
getX: function() {
return this.x * this.y
}
};
const unboundGetX = Promise.resolve(module.getX());
const unboundGetY = Promise.resolve(module.getY());
Promise.all([unboundGetX,unboundGetY]).then(val => {
console.log(val);
})
//[1638, 81]


浙公网安备 33010602011771号