ゾーンと呼ばれる今後の機能がここで役立ちます。また、チェックしてくださいgetAttachedStackTrace
。
この例では、「catchError の内部」が出力されます。
import 'dart:async';
void main() {
runZonedExperimental(() {
new Future.value(1)
.then((v) => v)
.then((v) => throw new ArgumentError('testing'))
.then((v) => v)
.catchError((e) => print('inside of catchError'));
},
onError: print);
}
この例では、「in onError」が出力されます。
import 'dart:async';
void main() {
runZonedExperimental(() {
new Future.value(1)
.then((v) => v)
.then((v) => throw new ArgumentError('testing'))
.then((v) => v);
},
onError: (e) => print('in onError'));
}
この例では、「in onError: Illegal argument(s): testing」が出力されました。
import 'dart:async';
void main() {
runZonedExperimental(() {
new Future.value(1)
.then((v) => v)
.then((v) => throw new ArgumentError('testing'))
.then((v) => v);
},
onError: (e) => print('in onError: $e'));
}
この例では、元の例外が発生したファイルと行番号を含むスタック トレースを出力します。
#0 main.<anonymous closure>.<anonymous closure> (file:///Users/sethladd/dart/zoneexperiment/bin/zoneexperiment.dart:7:20)
コード:
import 'dart:async';
void main() {
runZonedExperimental(() {
new Future.value(1)
.then((v) => v)
.then((v) => throw new ArgumentError('testing'))
.then((v) => v);
},
onError: (e) => print(getAttachedStackTrace(e)));
}
ゾーンは 1.0 より前に試験運用版から移行する必要があります。
getAttachedStackTrace のドキュメント: http://api.dartlang.org/docs/releases/latest/dart_async.html#getAttachedStackTrace
runZoned のドキュメント: http://api.dartlang.org/docs/releases/latest/dart_async.html#runZonedExperimental