function getUserInfo () { returnnewPromise((resolve, reject) => { setTimeout(() => { reject('请求出错了哦') }, 1000) }) } asyncfunction logined () { try { let userInfo = await getUserInfo() // 如果上面出错了,这里就不会执行了 let pageInfo = await getPageInfo(userInfo?.userId) } catch(e) { console.warn('抓到一个错误:', e) } } logined()这种写法的好处是错误能抓住,而且代码会在出错的地方停下来,不会继续往下执行。缺点就是 try catch 占了太多行数,每个接口都这么写的话,代码看起来有点啰嗦。
function getUserInfo () { returnnewPromise((resolve, reject) => { setTimeout(() => { reject('请求出错了哦') }, 1000) }) } asyncfunction logined () { let userInfo = await getUserInfo().catch(e =>console.warn('抓到一个错误:', e)) // 注意:这里即使出错了也会继续执行! if (!userInfo) return// 所以得手动检查一下 let pageInfo = await getPageInfo(userInfo?.userId) } logined()这种写法也能抓住错误,但是程序不会自动停下来,还会继续往下走。所以你得自己检查 userInfo 是不是空的,不然可能会出问题。
function getUserInfo () { returnnewPromise((resolve, reject) => { setTimeout(() => { reject('请求出错了哦') }, 1000) }) } asyncfunction logined () { let userInfo = await getUserInfo().catch(e => { console.warn('抓到一个错误:', e) returnPromise.reject(e) // 这里再扔出去一次 }) // 这样就会停在这里了 let pageInfo = await getPageInfo(userInfo?.userId) } logined()这种写法能让程序在出错的地方停下来,但是会在控制台留下一个 "uncaught (in promise)" 的错误提示,有些人觉得这样不太好看。
let userInfo = await getUserInfo().catch(e => console.warn(e)) if (!userInfo) return // 记得检查一下是不是空的这样控制台不会报红字错误。想中断程序,又不想看控制台报错,就用 try catch:
try { // 堆代码 duidaima.com let userInfo = await getUserInfo() let pageInfo = await getPageInfo(userInfo?.userId) } catch(e) { console.warn(e) }想中断程序,又不介意控制台报错:
let userInfo = await getUserInfo().catch(e => { console.warn(e) return Promise.reject(e) }) // 这里会停下来 let pageInfo = await getPageInfo(userInfo?.userId)我的建议
4.符合直觉:出错了就应该停下来