promise详解
/
promise 详解
# 为什么要用 promise
- 解决 AJAX 的回调地狱问题
- 代码逻辑更加清晰
# 常规用法
- 状态一旦发生变更,无法回头
- 三个状态,pending,resolved,rejected
- .then return 出来的是已完成状态的 promise 对象,所以可以继续.then
// 操作错误时,如果传入了reject方法,就近reject方法,如果没有,就会进catch。如果都没有,就无事发生
var p = new Promise(function(resolve, reject) {
var flag = false
if (flag) {
resolve('这是数据2')
} else {
reject('这是数据2')
}
})
p.then(
function(data) {
//状态为fulfilled时执行
console.log(data)
console.log('这是成功操作')
},
function(reason) {
//状态为rejected时执行
console.log(reason)
console.log('这是失败的操作')
}
)
.catch(function(reason) {
console.log(reason)
console.log('这是失败的操作')
})
.finally()
# promise.all
Promise.all 传入一个 promise 对象的数组,等待这个所有的请求执行完毕,才会进入.then。 返回的参数也是所有请求的结果数组。 一旦任何一个请求失败,都会进入 rejected
const p1 = new Promise((resolve, reject) => {
resolve('hello')
}).then(result => result)
const p2 = new Promise((resolve, reject) => {
throw new Error('报错了')
}).then(result => result)
Promise.all([p1, p2])
.then(result => console.log(result))
.catch(e => console.log(e))
# promise.any
跟all差不多,但是只要有一个请求是成功的,都会走到.then里