// Promise 是ES6提供的一众异步的解决方案,用来解决回调地狱
// Promise有三种状态,分别是 1.等待中(pending)、2.完成了(resolve)、3.拒绝了(rejected)
// 这个承诺一旦从等待状态变成为其他状态就永远不能再变更状态了,也就是说一旦状态 resolved,就不能再次改变
new Promise( (resolve,reject)=>{
resolve('Do');
reject('Does') // Promise经过resolve改变状态后就不能再次改变状态
}).then( res=>{
console.log(res,'--->Promise只能resolved一次')
})
// promise里面的代码立即执行
new Promise( (resolve,reject)=>{
console.log('resolve') // 立马执行,先于finish
resolve('resolve')
})
console.log('finish') // 在resolve之后打印
// promise链式调用 每次调用then之后会返回一个 promise
// then链可以解决回调地狱的问题 (可以利用async await来解决冗长的then链)
// .catch 接收一个参数,可以捕获错误
new Promise( (resolve,reject)=>{
resolve('完成了')
} ).then(res=>{
console.log(res,'--->第一次') // 完成了 第一次
return '完成了第二次' // return 的值会返回给下一个promise来resolve
}).then( res=>{
console.log(res,'--->第二次') // 完成了第二次 第二次
}).catch( err=>console.log(err)) // catch 捕获错误
// .finally 没有参数,可以处理程序以及把结果传递给下一个程序处理
new Promise( (resolve,reject)=>{
// resolve('ok')
reject('error')
}).then(res=>{
console.log(res)
}).finally( ()=>{
// alert('ok')
console.log('finally传给给下一个程序')
}).catch(err=>{
console.log(err,'--->处理finally之后的程序')
})
// Promise.all() 用于将多个Promise实例包装成一个新的promise实例,只有当所有的程序都完成或者有一个程序变为 reject
// const p = Promise.all([p1, p2, p3]);
// Promise.race() 用于将多个Promise实例,包装成一个新的Promise实例,当其中一个实例率先改变状态,p的状态就跟着改变。
// 那个率先改变的Promise实例的返回值,就传递给p的回调函数
// const p = Promise.race([p1,p2,p3])
console