SOURCE

// 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 命令行工具 X clear

                    
>
console