- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最小可重现代码:
Future<void> foo() async => throw Future.error('Foo');
void main() {
foo().catchError(print);
}
我仍然在控制台上看到这个错误
Dart Unhandled Exception: Foo, stack trace:
如果我抛出 FlutterError(...)
,错误会被捕获但 Future.error(...)
会失败。原因是出现的错误本身就是一个Future
,但是我该如何处理呢?
最佳答案
你的代码有两个问题:
你的 async
标记的方法实际上并没有真正作为事件队列中的另一个事件运行,直到第一个 await
正在发生。
在这种情况下,这意味着在我们有时间分配任何错误处理之前实际上抛出了异常,因此我们得到了一个错误。此行为可以在 catchError
的文档中找到:
Note that futures don't delay reporting of errors until listeners are added. If the first catchError (or then) call happens after this future has completed with an error then the error is reported as unhandled error.
https://api.dart.dev/stable/2.12.2/dart-async/Future/catchError.html
解决这个问题的方法是实际制作一个 await
在抛出异常之前,让我们这样做:
Future<void> foo() async {
await Future<void>.value();
throw Future.error('Foo');
}
void main() {
foo().catchError(print);
}
但是我们现在收到以下错误作为我们需要研究的输出:
Instance of 'Future<dynamic>'
Unhandled exception:
Foo
Instance of 'Future<dynamic>'
是来自 print
的一行试图打印错误的方法。如我们所见,我们得到了一个 Future
。对象在这里。这个对象其实就是从Future.error('Foo')
创建的对象.
在 Dart 中我们可以 throw
我们想要的任何对象。在 async
标记的方法,这个对象将被打包在一个 Future.error
中.因此,在您的情况下,您实际所做的是 Future.error(Future.error('Foo'))
.
然后您处理的是外部错误,而不是内部错误。如果我们这样做:
Future<void> foo() async {
await Future<void>.value();
throw Future.error('Foo');
}
Future<void> main() async {
await foo().catchError((Object obj) => (obj as Future).catchError(print));
}
这将返回:
Foo
因为我们现在调用 catchError
在 Future
上创建者 Future.error('Foo')
.
关于dart - 为什么 catchError 无法捕捉到错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66952192/
我有一个相当冗长的命令行程序,它需要用户输入参数,然后使用这些参数进行处理。我想做的是将程序拆分为交互式和非交互式。我试图这样做,并打算让非交互式程序“调用”交互式程序并使用结果(参数),基于这些参数
谁能解释为什么我们在构造函数的参数中使用大括号。 class Cars { String carName; bool isAuto; // create the constructor
我想知道是否有Dart函数,例如PHP的 strrev()。如果没有,您能否请向我展示任何源代码如何自行实现? 谢谢。 最佳答案 我还没有在API中找到一个新的Dart用户(截至今天下午)。但是,以任
我有一个组件,我想根据一个 bool 值绑定(bind)一个不同的 css 类。我的组件代码中有以下内容: bindCssClass(div, "open", this, "task.isOpen")
我一直在研究如何在dart中播放.wav文件,并且已经能够通过dart:html库中定义的AudioElement成功完成此操作。但是,我对使用dart:web_audio库感兴趣,并且遇到了所有这些
Dart 是否旨在实现许多与 Haxe 相同的功能,以便能够针对其他语言和运行时?它是语言和工具的既定目标还是已知目标? 最佳答案 不。Dart 专门针对 web 应用程序开发(更具体地说,客户端 w
我正在尝试让 dart 正常工作。作为编辑器,我想使用 emacs dart-mode。我有两个关于在没有 dart 编辑器的情况下使用 dart 的问题: 1) 我是否需要手动调用 dart2js,
我正在使用列表来创建墨水瓶按钮。我想将列表放在一个单独的 dart 文件中,并将该文件导入到我使用列表的文件中。我不知道如何导入列表。 https://pastebin.com/mf0kvsGu 我制
我正在编写一个 flutter 应用程序,它通过蓝牙 (FlutterBlue) 向设备发送命令。该设备控制一些 LED。通信总体上运行良好,但是:在用户界面上,我有一个控制光强度的 slider 。
我正在使用来自 Get started: command-line and server apps | Dart 的说明.运行 dart --version 时,我得到: Dart VM versio
var c 返回 3 但 10/7=1.4285,其余为 0.4285,operator % 有错误? void main() { var a = 10; var b = 7; var c
如文档中所述: The const keyword isn’t just for declaring constant variables. You can also use it to create
在 Dart 中,我如何最好地编写相当于(不可变/值/非对象) 的代码输出或引用参数 ? 例如在 C#-ish 中,我可能会编码: function void example() { int re
Dart 支持的多重继承机制有哪些? 最佳答案 不,Dart 不支持多重实现继承。 Dart 具有接口(interface),并且与大多数其他类似语言一样,它具有多个接口(interface)继承。
我正在寻找有关如何制作可以采用位置子参数的 web 组件的资源。就像是: {{value}} // this could be any uneditable element {{value}
使用polymer.dart 的Dart 应用程序的pubspec.yaml 文件如下所示(来自Polymer.dart Code Lab): name: polymer_and_dart descr
今天我决定开始学习 Dart 语言,我从 Tour 开始,那里有一个例子: // These work in a const string. const aConstNum = 0; const aC
我正在查找字符串类和其他一些资源,试图了解如何格式化字符串。首先,我试图将数字填充到字符串中,但不是精度。 例子: int a = 0, b = 5, c = 15, d = 46; String
我知道的大部分是Javascript。我相信“列表”是 Dart 最接近数组的东西,但它们在技术上是一样的吗?将它们视为数组是错误的吗?同样, map 会被视为对象吗?我意识到可能存在差异,但进行这种
现在,白色背景刺痛了我的眼睛,因为这是一个looong的黑夜。是否可以从 Dart 编辑器 (v 0.1) 更改主题(更改为更暗的主题)?选择背景颜色和语法高亮怎么样? 最佳答案 是的,这是可能的,我
我是一名优秀的程序员,十分优秀!