项目里有很多不易读的写法,写几个demo,一起看看
new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise方法")resolve('第一个promise方法')},500)
}).then((result) => {return new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise成功后又执行的promise")reject('第一个promise成功后又执行的promise')},1100)})
}).catch((err) => {console.log('第一个promise发生了失败', err)
});
请问,catch方法捕捉的是“第一个promise”的失败,还是“第一个promise成功后又执行的promise”的错误?
结果:
new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise方法")resolve('第一个promise方法')},500)
}).then((result) => {return new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise成功后又执行的promise")reject('第一个promise成功后又执行的promise')},1100)})
}).catch((err) => {console.log('失败', err)
});
//--------第一个promise方法
//--------第一个promise成功后又执行的promise
//失败 第一个promise成功后又执行的promise
new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise方法")reject('第一个promise方法')},500)
}).then((result) => {return new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise成功后又执行的promise")reject('第一个promise成功后又执行的promise')},1100)})
}).catch((err) => {console.log('失败', err)
});
// --------第一个promise方法
// 失败 第一个promise方法
答案:
- 多个promise嵌套,按顺序执行
- 第一个promise出错,catch捕捉的就是第一个的
- 第一个promise成功,进入到then逻辑,then里的失败,catch可以捕捉到
new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise方法")resolve('第一个promise方法')},500)
}).then((result) => {new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise成功后又执行的promise")reject('第一个promise成功后又执行的promise')},1100)}).catch((err) => {console.log('err', err)// return Promise.resolve('第一个promise成功后又执行的promise')
})
}).catch((err) => {console.log('失败', err)
});
// --------第一个promise方法
//--------第一个promise成功后又执行的promise
// err 第一个promise成功后又执行的promise
new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise方法")resolve('第一个promise方法')},500)
}).then((result) => {return new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise成功后又执行的promise")reject('第一个promise成功后又执行的promise')},1100)}).catch((err) => {console.log("执行了么", err)return Promise.reject(err)// console.log('err', err)// return Promise.resolve('第一个promise成功后又执行的promise')})
}).catch((err) => {console.log('失败', err)
});//--------第一个promise方法
//--------第一个promise成功后又执行的promise
//执行了么 第一个promise成功后又执行的promise
//失败 第一个promise成功后又执行的promise
- 只会捕捉一次
new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise方法")resolve('第一个promise方法')},500)
}).then((result) => {return new Promise((resolve, reject) => {setTimeout(function() {console.log("--------第一个promise成功后又执行的promise")reject('第一个promise成功后又执行的promise')},1100)}).catch((err) => {console.log("执行了么", err)// return Promise.reject(err)// console.log('err', err)// return Promise.resolve('第一个promise成功后又执行的promise')})
}).catch((err) => {console.log('失败', err)
});//--------第一个promise方法
//--------第一个promise成功后又执行的promise
//执行了么 第一个promise成功后又执行的promise