目前有这样的需求,页面上有两个按钮---保存和提交,点击保存的时候,会调用保存接口,点击提交的时候回先调用保存接口然后调用提交接口。然后我就写成如下:
// 点击保存按钮的时候
save () {
// 请求保存接口
axios.get(...).then(){
// 消息提示
}.catch(error) {
处理错误信息
}
}
// 请求提交接口
commit () {
axios.get(...).then() {
// ....
}.catch(error) {
// 错误处理
}
}
confirm () {
// 先请求保存接口
axios.get(...).then(){
// 调用提交接口
this.commit()
}.catch(error) {
处理错误信息
}
}
一开始我是这么写的,因为也就2个接口链式,但是后来我仔细一想这样写的话,不就是回调地狱的写法了吗,在then的回调函数里调用函数。
所以我改写成
// 点击保存按钮的时候
save () {
// 请求保存接口
axios.get(...).then(){
// 消息提示
}.catch(error) {
处理错误信息
}
}
// 请求提交接口
commit () {
return axios.get(...)
}
confirm () {
// 先请求保存接口
axios.get(...).then(){
// 调用提交接口
return this.commit()
}.then() {
}.catch(error) {
// 错误处理
}
}
但是这样我想到一个问题,他后面这个catch捕获的是保存接口的报错还是提交接口的报错呢?
总所周知then和catch都会返回promise,如果就是就近的使用catch捕捉,那么后面的then方法会运行造成不可预料的错误
// 看你想怎么捕捉了
// 一个promise 异常会被就近的catch捕捉
// 验证