Questions tagged «throw»

8
`throw new Error`和`throw someObject`有什么区别?
我想编写一个通用的错误处理程序,它将捕获在任何代码实例上故意抛出的自定义错误。 当我throw new Error('sample')喜欢以下代码时 try { throw new Error({'hehe':'haha'}); // throw new Error('hehe'); } catch(e) { alert(e); console.log(e); } 日志在Firefox中显示为,Error: [object Object]而我无法解析该对象。 对于第二个throw日志,显示为:Error: hehe 我什么时候做 try { throw ({'hehe':'haha'}); } catch(e) { alert(e); console.log(e); } 控制台显示为:Object { hehe="haha"}在其中可以访问错误属性。 有什么区别? 代码中有区别吗?像字符串一样,只是作为字符串传递,而像对象一样传递,但是语法会有所不同吗? 我没有探索过抛出错误对象……我只做过抛出字符串。 除上述两种方法外,还有其他方法吗?

6
为什么我不能扔在Promise.catch处理程序中?
为什么我不能只Error在catch回调内部抛出错误,让进程像在其他作用域中一样处理错误? 如果我不这样做,那么console.log(err)什么也不会打印出来,我也不知道发生了什么。这个过程刚刚结束... 例: function do1() { return new Promise(function(resolve, reject) { throw new Error('do1'); setTimeout(resolve, 1000) }); } function do2() { return new Promise(function(resolve, reject) { setTimeout(function() { reject(new Error('do2')); }, 1000) }); } do1().then(do2).catch(function(err) { //console.log(err.stack); // This is the only way to see the stack throw err; // …

14
我应该在C ++中使用异常说明符吗?
在C ++中,可以通过使用异常说明符来指定一个函数可以抛出异常,也可以不抛出异常。例如: void foo() throw(); // guaranteed not to throw an exception void bar() throw(int); // may throw an exception of type int void baz() throw(...); // may throw an exception of some unspecified type 由于以下原因,我对实际使用它们表示怀疑: 编译器实际上并没有以任何严格的方式强制执行异常说明符,因此好处并不大。理想情况下,您希望获得一个编译错误。 如果函数违反异常说明符,我认为标准行为是终止程序。 在VS.Net中,它将throw(X)视为throw(...),因此对标准的遵循性不强。 您认为应该使用异常说明符吗? 请回答“是”或“否”,并提供一些理由来证明您的回答合理。

4
在C ++中,如果throw是一个表达式,它的类型是什么?
我在进行Reddit的简短尝试之一时就选择了此功能: http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/ 基本上,作者指出在C ++中: throw "error" 是一个表达。实际上,C ++标准在正文和语法中都清楚地阐明了这一点。但是,(至少对我而言)不清楚什么是表达式的类型?我猜到了“ void”,但是尝试使用g ++ 4.4.0和Comeau产生了以下代码: void f() { } struct S {}; int main() { int x = 1; const char * p1 = x == 1 ? "foo" : throw S(); // 1 const char * p2 = x == 1 ? "foo" …
115 c++  throw 

7
C ++中的异常如何工作(在幕后)
我一直看到人们说例外情况很慢,但我从未见过任何证据。因此,我将询问异常在后台如何工作,而不是询问它们是否存在,以便我可以决定何时使用它们以及它们是否缓慢。 据我所知,异常与执行多次返回相同,不同之处在于它还会在每次返回之后检查是否需要执行另一个操作或停止操作。如何检查何时停止返回?我猜有第二个堆栈保存异常的类型和堆栈位置,然后它会返回直到到达那里。我还猜测第二个堆栈唯一碰到的是一次掷球和每次尝试/接球。AFAICT使用返回码实施类似行为将花费相同的时间。但这只是一个猜测,所以我想知道真正发生了什么。 异常如何真正起作用?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.