【发布时间】:2015-05-04 19:23:00
【问题描述】:
我正在尝试利用 stack_trace 提供的 Chain 对象,如下所示:
import 'dart:async';
import 'package:stack_trace/stack_trace.dart';
main() async {
print('Hello world: ${console_test.calculate()}!');
Chain.capture(() async {
try {
await testFunction();
} catch(e,st) {
print(Trace.format(new Chain.forTrace(st)));
}
});
}
Future testFunction() async {
throw new Exception("TEST");
}
我得到的输出是这样的:
Hello world: 42!
main.dart 4:1 main.<async>.<fn>.<async>
我知道输出的堆栈跟踪应该包括 testFunction,但由于某种原因它不是。如果我用期货来代替:
import 'dart:async';
import 'package:stack_trace/stack_trace.dart';
main() async {
print('Hello world: ${console_test.calculate()}!');
Chain.capture(() {
return testFunction();
}, onError: (e, stackTrace) => print(Trace.format(new Chain.forTrace(stackTrace))));
}
Future testFunction() async {
throw new Exception("TEST");
}
我得到了更多预期的输出:
Hello world: 42!
main.dart 17:3 testFunction.<async>
dart:async _Completer.completeError
main.dart 4:1 testFunction.<async>
dart:async Future.Future
main.dart 4:1 testFunction
main.dart 11:26 main.<async>.<fn>
package:stack_trace Chain.capture
main.dart 10:16 main.<async>
我做错了吗? Chain 是否与整个 async/await 不兼容?
【问题讨论】:
标签: dart dart-async