草庐IT

try-catch-rethrow

全部标签

javascript - 为什么在 try/catch 中重新声明参数会抛出 ReferenceError?

我错误地在函数中将参数重新声明为const而不是抛出SyntaxError:Identifier'bar'hasalreadybeendeclared我结束了与ReferenceError:barisnotdefined.。是什么导致了这种行为?这不是预期的错误,让我困惑了几分钟。示例代码:functionfoo(bar){try{console.log(bar);constbar=123;}catch(err){console.log(err)}}foo(456);如果我不将声明包装在try/catch中,我会得到(我认为是)预期的错误。 最佳答案

javascript - 为什么我不能在 try block 中定义之前使用 Javascript 函数?

讨论here,函数定义可以在定义之前使用。但是一旦一段代码被包裹在一个tryblock中,情况就不再是这样了。这会显示“Helloworld”:hello();functionhello(){alert("Helloworld");}但这会显示“ReferenceError:helloisnotdefined”:try{hello();functionhello(){alert("Helloworld");}}catch(err){alert(err);}因此,在函数声明方面,tryblock显然有一些“特殊”之处。有什么办法可以避免这种行为? 最佳答案

javascript - 如何从 Promise 的 catch/then block 中返回?

有很多教程介绍如何在使用JavaScriptPromise编程时使用“then”和“catch”。然而,所有这些教程似乎都忽略了一个重点:从then/catchblock返回以打破Promise链。让我们从一些同步代码开始来说明这个问题:try{someFunction();}catch(err){if(!(errinstanceofMyCustomError))return-1;}someOtherFunction();本质上,我正在测试一个捕获的错误,如果不是我期望的错误,我将返回给调用者,否则程序将继续。但是,此逻辑不适用于Promise:Promise.resolve(some

javascript - 警告 : Tried to load angular more than once. Angular JS

我正在尝试在运行GruntBuild后查看我的应用程序。我使用gruntserve:dist查看所有生产就绪构建,但在浏览器中我得到一个无限循环说:WARNING:Triedtoloadangularmorethanonce.我已经读到发生这种情况是因为TemplateURL:连接后可能是错误的。正如在这篇文章中:TriedtoLoadAngularMoreThanOnce但是我该如何解决这个问题呢?这是我的app.js/*globallibjsapp:true*/'usestrict';varlibjsapp=angular.module('libjsApp',['ngCookies

javascript - 使用 Async/Await 正确的 Try...Catch 语法

我喜欢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外声明

javascript - catch forEach 最后一次迭代

arr=[1,2,3];arr.forEach(function(i){//lastiteration});如何捕捉循环结束的时间?我可以执行if(i==3)但我可能不知道数组的编号是多少。 最佳答案 ES6+的更新答案是here.arr=[1,2,3];arr.forEach(function(i,idx,array){if(idx===array.length-1){console.log("Lastcallbackcallatindex"+idx+"withvalue"+i);}});会输出:Lastcallbackcalla

javascript - 重新抛出 promise catch 中的错误

我在教程中找到了以下代码:promise.then(function(result){//somecode}).catch(function(error){throw(error);});我有点困惑:catch调用有什么作用吗?在我看来,它没有任何效果,因为它只是抛出了被捕获的相同错误。我基于常规try/catch的工作原理。 最佳答案 如您所见,赤裸裸的catch和throw毫无意义。除了添加代码和减慢执行速度外,它没有做任何有用的事情。所以,如果你要.catch()并重新抛出,在.catch()中应该有你想做的事情,否则你应该删

javascript - 为什么 `finally` 中的返回覆盖 `try` ?

try/catchblock中的return语句如何工作?functionexample(){try{returntrue;}finally{returnfalse;}}我希望这个函数的输出是true,但它是false! 最佳答案 最后总是执行。这就是它的用途,这意味着它的返回值会在您的情况下使用。您需要更改您的代码,使其更像这样:functionexample(){varreturnState=false;//initializationvalueisreallyuptothedesigntry{returnState=true;

javascript - promise : then vs then + catch

这个问题在这里已经有了答案:Whenis.then(success,fail)consideredanantipatternforpromises?(7个答案)关闭7年前。下面2个代码有区别吗?myPromise.then(function(){console.log('success');}).catch(function(){console.log('error');});myPromise.then(function(){console.log('success');},function(){console.log('error');});我知道then和catch返回已解决或拒

javascript - try {} without catch {} 可以在 JavaScript 中使用吗?

我有很多函数要么返回一些东西,要么抛出错误。在主函数中,我调用了其中的每一个,并希望返回每个函数返回的值,或者如果第一个函数抛出错误则继续第二个函数。所以基本上我目前拥有的是:functiontestAll(){try{returnfunc1();}catch(e){}try{returnfunc2();}catch(e){}//Iffunc1throwserror,tryfunc2try{returnfunc3();}catch(e){}//Iffunc2throwserror,tryfunc3}但实际上我只想尝试返回它(即如果它不抛出错误)。我不需要catchblock。但是,像t