在与Microsoft员工进行代码审查时,我们发现try{}block中有一大段代码。她和一位IT代表建议这可能会影响代码的性能。事实上,他们建议大部分代码应该在try/catchblock之外,并且应该只检查重要的部分。微软员工补充说,即将发布的白皮书警告不要使用不正确的try/catchblock。我环顾四周,找到了它canaffectoptimizations,但它似乎只适用于范围之间共享变量的情况。我不是在问代码的可维护性,甚至不是在处理正确的异常(毫无疑问,有问题的代码需要重构)。我也不是指使用异常进行流量控制,这在大多数情况下显然是错误的。这些都是重要的问题(有些更重要),
将代码放在try-catchblock中而不是执行各种错误检查会更快吗?例如..functiongetProjectTask(projectTaskId){if(YAHOO.lang.isUndefined(projectTaskId)||YAHOO.lang.isNull(projectTaskId)&&!YAHOO.lang.isNumber(projectTaskId)){returnnull;}varprojectPhaseId,projectPhaseIndex,projectTaskIndex,projectPhases,projectPhase,projectTask;i
当我使用JavaScript开发普通的Web应用程序时,通常不需要try/catch语句。没有checkedexception,JavaScript中的文件IO或数据库连接。try/catch语句在JavaScript中有用吗?我什么时候可以使用它? 最佳答案 try...catchblock通常鼓励少用,这与您使用的语言无关。主要原因是catchblock的成本。另一个原因是,当您用一个try...catchblock包装许多语句时,在catchblock中您无法确定主要问题到底是什么.最好使用输入验证或if...elsebloc
我错误地在函数中将参数重新声明为const而不是抛出SyntaxError:Identifier'bar'hasalreadybeendeclared我结束了与ReferenceError:barisnotdefined.。是什么导致了这种行为?这不是预期的错误,让我困惑了几分钟。示例代码:functionfoo(bar){try{console.log(bar);constbar=123;}catch(err){console.log(err)}}foo(456);如果我不将声明包装在try/catch中,我会得到(我认为是)预期的错误。 最佳答案
讨论here,函数定义可以在定义之前使用。但是一旦一段代码被包裹在一个tryblock中,情况就不再是这样了。这会显示“Helloworld”:hello();functionhello(){alert("Helloworld");}但这会显示“ReferenceError:helloisnotdefined”:try{hello();functionhello(){alert("Helloworld");}}catch(err){alert(err);}因此,在函数声明方面,tryblock显然有一些“特殊”之处。有什么办法可以避免这种行为? 最佳答案
我喜欢Typescript等中可用的新Async/Await功能的平坦度。但是,我不确定我是否喜欢我必须声明变量的事实await在try...catchblock的外部,以便稍后使用它。像这样:letcreatedUsertry{createdUser=awaitthis.User.create(userInfo)}catch(error){console.error(error)}console.log(createdUser)//business//logic//goes//here如果我错了请纠正我,但最好的做法是不要在try主体中放置多行业务逻辑,所以我只剩下在block外声明
try/catchblock中的return语句如何工作?functionexample(){try{returntrue;}finally{returnfalse;}}我希望这个函数的输出是true,但它是false! 最佳答案 最后总是执行。这就是它的用途,这意味着它的返回值会在您的情况下使用。您需要更改您的代码,使其更像这样:functionexample(){varreturnState=false;//initializationvalueisreallyuptothedesigntry{returnState=true;
我有很多函数要么返回一些东西,要么抛出错误。在主函数中,我调用了其中的每一个,并希望返回每个函数返回的值,或者如果第一个函数抛出错误则继续第二个函数。所以基本上我目前拥有的是:functiontestAll(){try{returnfunc1();}catch(e){}try{returnfunc2();}catch(e){}//Iffunc1throwserror,tryfunc2try{returnfunc3();}catch(e){}//Iffunc2throwserror,tryfunc3}但实际上我只想尝试返回它(即如果它不抛出错误)。我不需要catchblock。但是,像t
我有一个经典的“生产者-消费者”问题的变体。在我的程序中,有10个生产者并行工作,他们的目标是总共生产N个产品。我考虑过使用缓冲channel:products:=make([]int,100)//Intotal,produce100products//Theproducersfori:=0;i但是,它不会起作用:goroutine没有意识到目标已经达到,channel发送阻塞,函数永远不会返回。iflen(products)不是原子操作,因此没有帮助。那么还有没有别的办法呢? 最佳答案 products:=make([]int,1
我有一个记录在线用户的innoDB表。它会在用户每次刷新页面时更新,以跟踪他们所在的页面以及他们上次访问该站点的日期。然后我有一个每15分钟运行一次的cron来删除旧记录。我在尝试获取锁时发现了“死锁”;昨晚尝试重新启动事务约5分钟,似乎是在向该表运行INSERT时。有人可以建议如何避免此错误吗?===编辑===以下是正在运行的查询:首次访问网站:INSERTINTOonlineusersSETip=123.456.789.123,datetime=now(),userid=321,page='/thispage',area='thisarea',type=3在每个页面刷新:UPDAT