当前位置: 首页 > news >正文

珠海做网站报价网站集约化建设启示和建议

珠海做网站报价,网站集约化建设启示和建议,php网站识别手机,韩国的汽车设计网站大厂技术 高级前端 Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交 前言 写异步函数的时候,promise 和 async 两种方案都非常常见,甚至同一个项目里,不同的开发人员都使用不同的习惯, 不过关于两…

大厂技术  高级前端  Node进阶

点击上方 程序员成长指北,关注公众号
回复1,加入高级Node交
前言

写异步函数的时候,promise 和 async 两种方案都非常常见,甚至同一个项目里,不同的开发人员都使用不同的习惯, 不过关于两者的比较不是本文关注的重点,只总结为一句话:“async 是异步编程的终极解决方案”。

当使用 async 函数的时候,很多文章都说建议用 try catch 来捕获异常, 可是实际上我看了很多项目的代码,遵循的并不是严谨,很多都没有用,甚至 catch 函数都没写,这是为什么呢?

我们先看下使用 try catch 情况下的代码示例:

示例1 :使用 try catch

function getUserInfo () {return new Promise((resolve, reject) => {setTimeout(() => {reject('请求异常')}, 1000)})
}async function logined () {try {let userInfo = await getUserInfo()// 执行中断let pageInfo = await getPageInfo(userInfo?.userId)} catch(e) {console.warn(e)}
}logined()
复制代码

执行后会在 catch 里捕获 请求异常,然后 getUserInfo 函数中断执行,这是符合逻辑的,对于有依赖关系的接口,中断执行可以避免程序崩溃,这里唯一的问题是 try catch 貌似占据了太多行数,如果每个接口都写的话看起来略显冗余。

示例2:直接 catch

鉴于正常情况下,await 命令后面是一个 Promise 对象, 所以上面代码可以很自然的想到优化方案:

function getUserInfo () {return new Promise((resolve, reject) => {setTimeout(() => {reject('请求异常')}, 1000)})
}async function logined () {let userInfo = await getUserInfo().catch(e => console.warn(e))// 执行没有中断,userInfo 为 undefinedif (!userInfo) return // 需要做非空校验let pageInfo = await getPageInfo(userInfo?.userId)
}logined()
复制代码

执行后 catch 可以正常捕获异常,但是程序没有中断,返回值 userInfo 为 undefined, 所以如果这样写的话,就需要对返回值进行非空校验, if (!userInfo) return 我觉得这样有点反逻辑,异常时就应该中断执行才对;

示例3:在 catch 里 reject

可以继续优化,在 catch 里面加一行 return Promise.reject(e), 可以使 await 中断执行;

完整代码:

function getUserInfo () {return new Promise((resolve, reject) => {setTimeout(() => {reject('请求异常')}, 1000)})
}async function logined () {let userInfo = await getUserInfo().catch(e => {console.warn(e)return Promise.reject(e) // 会导致控制台出现 uncaught (in promise) 报错信息})// 执行中断let pageInfo = await getPageInfo(userInfo?.userId)
}logined()
复制代码

一般我们在项目里都是用 axios 或者 fetch 之类发送请求,会对其进行一个封装,也可以在里面进行 catch 操作,对错误信息先一步处理,至于是否需要 reject,就看你是否想要在 await 命令异常时候中断了;不使用 reject 则不会中断,但是需要每个接口拿到 response 后先 非空校验, 使用 reject 则会在异常处中断,并且会在控制台暴露 uncaught (in promise) 报错信息。

b837878aa33bddce81972600cfcd8026.jpeg
截屏2023-03-22 16.55.14.png

建议

不需要在 await 处异常时中断,可以这样写,需要做非空校验,控制台不会有报错信息

let userInfo = await getUserInfo().catch(e => console.warn(e))
if (!userInfo) return
复制代码

需要在 await 处异常时中断,并且在意控制台报错,可以这样写

try {let userInfo = await getUserInfo()// 执行中断let pageInfo = await getPageInfo(userInfo?.userId)
} catch(e) {console.warn(e)
}复制代码

需要在 await 处异常时中断,但是不在意控制台报错,则可以这样写

let userInfo = await getUserInfo().catch(e => {console.warn(e)return Promise.reject(e) // 会导致控制台出现 uncaught (in promise) 报错信息
})
// 执行中断
let pageInfo = await getPageInfo(userInfo?.userId)复制代码

小结

几种写法,初看可能觉得第三种 catch 这种写法是最好的,但是细想下,从用户体验上来看,我觉得 try catch 是最好的,逻辑直观、符合同步编程思维,控制台不会暴露 uncaught (in promise) 报错信息;

而链式调用的 catch (里面再 reject),是传统 promise 的回调写法,既然已经用 async await 这种同步编程写法了,再用 catch 链式写法,感觉没必要。

结语

我是考拉🐨,一个热心的前端菜鸟程序员。如果你上进,喜欢前端,想学习前端,那咱们可以交朋友,一起摸鱼哈哈,摸鱼群,关注我,拉你进群,有5000多名前端小伙伴在等着一起学习哦 -->

作者:Ethan_Zhou
链接:https://juejin.cn/post/7213362932423376933
来源:稀土掘金

 

Node 社群

我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

02c08a166dff123865cb365d9c30bb45.png

“分享、点赞、在看” 支持一波👍
http://www.yayakq.cn/news/974564/

相关文章:

  • 网站开发的进度控制计划表如何做网站自适应
  • 做网站多少钱zwnet安徽建设厅网站
  • 求一个全部用div做的网站wordpress做的企业官网
  • wordpress视频站吉首网站建设
  • 深圳蚂蚁网络网站建设wordpress用代码写页面模板
  • 深圳做网站的人阿里巴巴网站建设公司
  • 贵州城乡建设厅考试网站网站设计与管理的软件
  • 沭阳住房城乡建设局网站四川住房城乡和城乡建设厅网站首页
  • 自己主机做多个网站中国正式宣布出兵
  • 晋城网站制作公司苏州北京商场网站建设
  • 小说网站的内容做产品展厅柜设计公司
  • 如何做好企业网站微网站开发 付费阅读
  • 网页设计与网站组建珠海网站建
  • 阿里云网站建设流程中国十大网络安全龙头
  • 外贸公司网站网站颜色正确搭配实例
  • 做科研找论文的网站网站怎么做域名实名认证吗
  • 公司做年审在哪个网站建网站手机怎么做
  • 专业集团门户网站建设做招聘和求职都需要哪些网站
  • 网站用橙色wordpress 同步qq空间
  • 湖南省建设厅厅长宜昌做网站优化
  • 建的企业网站如何在百度搜到门户网站广告的特点有
  • 付费下载网站源码wordpress 如何修改主题中元素
  • 城阳网站开发东莞seo建站优化方法
  • 网站是意识形态建设做资源下载网站用什么工具
  • 海口手机端建站模板wordpress 自定义后台
  • 大学网站建设情况汇报免费网页模板素材
  • joomla 做外贸网站 好的无法打开网站若要访问本地iis网站必须安装下列iis组件
  • 网站收录查询方法福州移动网站建设
  • 荆州松滋网站建设紧急通知网页升级记住我们
  • 公司企业网站建设方案书visual studio怎么做网页