异常处理function ajax(param) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (param) {
resolve(param)
} else {
reject(new Error('没有参数'))
}
}, 1000)
})
}
ajax().then(res => {
console.log(res)
return ajax(res + 1)
}, err => {
console.log(err)
})
如果没传参,Promise中会通过reject返回一个err错误,这个错误会被then方法中第二个回调函数接收。
如果正确传参,但是在Promise中发生了其他的错误,比如像下面这样调用一个不存在的函数,报的错误也会被then的第二个回调函数接收:function ajax(param) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (param) {
foo()// 调用一个不存在的函数
resolve(param)
} else {
reject(new Error('没有参数'))
}
}, 1000)
})
}
在Promise的链式调用中,无论哪一个链式中出了错误,都会一层一层往后传,最后被catch捕获:ajax(1).then(res => {
console.log(res)
return ajax(res + 1)
}).then(res2 => {
console.log(res2)
return ajax()
}).then(res3 => {
console.log(res3)
return ajax(res3 + 1)
}).catch(err => {
console.log(err)
})