一、promise有三种状态
1、pending 准备阶段
2、resolve 成功状态
3、reject 失败状态

new Promise((resolve, reject)=>{
    // 当没有返 resolve 或 reject 时, 是 pending 状态
})
new Promise((resolve, reject)=>{
    resolve();
    reject();
    // promise状态一旦变更, 就不会更改, 所以只执行第一个成功的调用
})

二、then对于promise的返回结果进行处理

格式:
new Promise((resolve,reject)=>{
    resove();
}).then(data=>{
    // 执行resolve()走这个处理分支
},err=>{
    // 执行reject()走这个处理分支
})

1、then中只写成功的方法
new Promise((resolve, reject)=>{
    resolve()
}).then(()=>{
    console.log('success')
})

2、then中只写拒绝的方法
new Promise((resolve, reject)=>{
    reject()
}).then(null, (err)=>{
    console.log('err', err)
})

3、第一个then未对状态改变处理数据则向后处理
new Promise((resolve, reject)=>{
    reject()
}).then().then(null, ()=>{
    console.log('第二个then处理reject')
})

4、promise resolve 第一个then处理了状态
new Promise((resolve,reject)=>{
    resolve()
}).then(()=>{
    console.log('第一个then处理成功')
},err=>{
    console.log('第一个then处理 err')
}).then(()=>{
    console.log('第二个then处理成功')
},err=>{
    console.log('第二个then处理 err')
})
// 第一个then处理成功
// 第二个then处理成功

5、第一个then对状态改变处理了 promise reject
new Promise((resolve,reject)=>{
    reject()
}).then(()=>{
    console.log('第一个then处理成功')
},err=>{
    console.log('第一个then处理 err')
}).then(()=>{
    console.log('第二个then处理成功')
},err=>{
    console.log('第二个then处理 err')
})

// 第一个then处理 err
// 第二个then处理成功

一颗冰淇淋
162 声望16 粉丝

开心学前端 : )