Dart throw 和 rethrow 有什么区别?

Meh*_*bla 1 exception try-catch throw dart flutter

这可能是显而易见的,但我还是不明白之间的差别throw,并rethrow和那些既做时,应使用?

Chr*_*ore 6

根据有效飞镖

如果您决定重新抛出异常,请更喜欢使用该rethrow语句而不是使用 抛出相同的异常对象throwrethrow保留异常的原始堆栈跟踪。throw另一方面,将堆栈跟踪重置为上次抛出的位置。

最大的区别是保留了原始堆栈跟踪。


他们提供了 2 个示例来说明预期用途:

坏的:

try {
  somethingRisky();
} catch (e) {
  if (!canHandle(e)) throw e;
  handle(e);
}
Run Code Online (Sandbox Code Playgroud)

好的:

try {
  somethingRisky();
} catch (e) {
  if (!canHandle(e)) rethrow;
  handle(e);
}
Run Code Online (Sandbox Code Playgroud)