参考:小一辈无产阶级码农
地址:https://www.jb51.net/article/139825.htm
1.定义:Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。
Promise有三个状态:Fulfilled:成功,Rejected:失败,Pending:待解决。
速记就是成功失败进行中。
状态一旦改变就不会再改变。
状态不受外界影响。抛出错误也不会影响外界。
基本用法:
let p1 = new Promise((resolve, reject) => {
resolve(2)
})
p1.then(value => console.log(value + 1))//输出3
解决地狱回调:(同时将上一次执行的数传递给下一个then)
function A(value) {
console.log(value)
return "from A"
}
function B(value) {
console.log(value)
return "from B"
}
function C(value) {
console.log(value)
return "from C"
}
let p1 = new Promise((resolve, reject) => {
resolve("开始")
})
p1.then(value => {
console.log(value)
return "传给下一个"
})
.then(A)
.then(B)
.then(C)
.then(value => console.log(value))
.catch(err => console.log(err))
输出:
2.相关Promise方法
(1)Promise.all()
定义:Promise.all方法用于将多个 Promise 实例,用来处理组合 Promise 的逻辑操作。
只有所有的Promise返回成功状态fulfilled才会为成功状态,否则为失败状态rejected。
例子:(两个任务并行执行)
let p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 200, "promise1")
})
let p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 300, "promise2")
})
Promise.all([p1,p2]).then(
result => console.log(result)//输出['promise1', 'primise2']
)
(2)Promise.race()
定义:区别于Promise.all(),只要有任意一个完成,就算完成。
例子:
let p1 = new Promise((resolve, reject) => {
// resolve("promise1")
setTimeout(resolve, 300, "promise1")
})
let p2 = new Promise((resolve, reject) => {
// resolve("promise2")
setTimeout(resolve, 200, "promise2")
})
Promise.race([p1,p2]).then(
result => console.log(result)//输出promise2
)
(3)Promise.reject()
定义及特性: Promise.reject()方法的参数,会原封不动地作为reject的理由,变成后续方法的参数。
例子1:
const p = new Promise((resolve, reject) => reject('error'))
p.then(null, result => console.log(result));//输出error
例子2:(等同于1)
const p = Promise.reject('error');
p.then(null, result => console.log(result));//输出error