Promies是什么?
Promise 是一种异步编程的解决方案
- 指定回调函数方式更灵活易懂。
- 解决异步回调地狱的问题
Promise的基本使用
var isHid = false
var promise = new Promise((resolve, reject) => {
if (isHid) {
return resolve('我成功了')
} else {
return reject('我失败了')
}
})
promise
.then(res => {
console.log(res)
})
.catch(res => {
console.log(res)
})
.finally(() => {
console.log('不管成功失败都会执行')
})
Promise 的三种状态
- pending
- rejected (resolve, 失败了)
- fulfilled (reject,成功了)
Promise.resolve
Promise.resolve('hhh')
相当于
new Promise((resolve, reject) => {
resolve('hhh')
})
Promise.reject
Promise.reject('hhh')
相当于
new Promise((resolve, reject) => {
reject('hhh')
})
Promise.all([ p1, p2 ])
- 接收的是一个数组,每一个p是promise
- 只要p中存在一个 reject ,就会走catch抛出错误,不会执行then
let p1 = new Promise((resolve, reject) => {
resolve('success111')
})
let p2 = new Promise((resolve, reject) => {
resolve('success222')
})
let p3 = Promise.reject('error')
Promise.all([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error)
})
Promise.all([p1, p3, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error)
})
Promise.allSettled([ p1, p2])
- 接收的是一个数组,每一个p是promise
-
不管是 resolve 还是 reject 都能够得到结果
Promise.race
- 无论成功失败,最先完成的获取结果
let p1 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve('success111')
}, 1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve('success111')
}, 2000)
})
let p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
reject('error')
}, 500)
})
Promise.race([p1, p3, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error)
})
Promise.any
- 失败的会被跳过,找第一个成功的
- 只有全部失败才会走catch
let p1 = new Promise((resolve, reject) => {
setTimeout(()=> {
reject('error111')
}, 1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve('success222')
}, 2000)
})
let p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
reject('error333')
}, 500)
})
Promise.any([p1, p3, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error)
})