老师帮忙看下。为什么捕获错误失败了

来源:5-1 Promise 的注意事项

qq_慕慕0057983

2022-04-13 23:47:50

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Promise.all()</title>
</head>
<body>
<script>
 
const delay=ms=>{
return new Promise(resolve=>{
setTimeout(resolve,ms)
})
}

const p1=delay(1000).then(()=>{
console.log('执行第一个')

return 'p1'
})


const p2=delay(2000).then(()=>{
console.log('执行第二个')

// return 'p2'
return Promise.reject('reason')
})


const p3=delay(3000).then(()=>{
console.log('执行第三个')

return 'p3'
// return Promise.reject('reason')
})

const p_all=Promise.all([p1,p2,p3])
const p_race=Promise.race([p1,p2,p3])


//如果最终p的状态为rejected 那么不会执行第一条语句
// p_all.then(
//   data=>{
//     console.log(data)
//   },
//   err=>{
//     console.log(err)
//   }
// )


// 1.Promise.race()
// Promise.race() 的状态取决于第一个完成的 Promise 实例对象,如果第一个完成的成功了,那最终的就成功;如果第一个完成的失败了,那最终的就失败
p_race.then(
data=>{
console.log(data)
},
// err=>{
//   console.log(err)
// }
).catch(err=>
console.log(err)
)

</script>
</body>
</html>


写回答

1回答

好帮手慕小李

2022-04-14

同学你好,在使用Promise.race的时候他与Promise.all的机制是不一样的,all是等全部走完,而race则有些像是在赛跑,那么当race第一个如果是成功了以后后面的全部都会走成功,所以同学这里并没法捕获到,同学可以稍作一下更改后看效果,如下:

https://img.mukewang.com/climg/62578a6409ae2edd09560605.jpg

https://img.mukewang.com/climg/62578a8709e240cd04320129.jpg

同学自己试试,祝学习愉快!

1

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程