一、reject後的東西,一定會進入then中的第二個回調,如果then中沒有寫第二個回調,則進入catch
var p1=new Promise((resolve,rej) => {
console.log('沒有resolve')
//throw new Error('手動返回錯誤')
rej('失敗了')
})
p1.then(data =>{
console.log('data::',data);
},err=> {
console.log('err::',err)
}).catch(
res => {
console.log('catch data::', res)
})
結果:
沒有resolve
err:: 失敗了
then中沒有第二個回調的情況
var p1=new Promise((resolve,rej) => {
console.log('沒有resolve')
//throw new Error('手動返回錯誤')
rej('失敗了')
})
p1.then(data =>{
console.log('data::',data);
}).catch(
res => {
console.log('catch data::', res)
})
結果:
沒有resolve
catch data:: 失敗了
如果沒有then, 也可以直接進入catch
var p1=new Promise((resolve,rej) => {
console.log('沒有 resolve')
//throw new Error('手動返回錯誤')
rej('失敗了')
})
p1.catch(
res => {
console.log('catch data::', res)
})
結果:
沒有resolve
catch data:: 失敗了
二、resolve的東西,一定會進入then的第一個回調,肯定不會進入catch
var p1=new Promise((resolve,rej) => {
console.log('resolve')
//throw new Error('手動返回錯誤')
resolve('成功了')
})
p1.then(data =>{
console.log('data::',data);
}).catch(
res => {
console.log('catch data::', res)
})
結果:
resolve
data:: 成功了
不會進入catch的情況
var p1=new Promise((resolve,rej) => {
console.log('resolve')
//throw new Error('手動返回錯誤')
resolve('成功了')
})
p1.catch(
res => {
console.log('catch data::', res)
})
結果:
resolve
- throw new Error 的情況和rej一樣,但是他倆只會有一個發生
- 另外,網絡異常(比如斷網),會直接進入catch而不會進入then的第二個回調**