可以用于promise面试的例子--其1
项目里有很多不易读的写法,写几个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