catchErrorがエラーをキャッチできないのはなぜですか?
Aug 24 2020
void main() {
foo().catchError((error) {
print('Error caught = $error');
});
}
Future<void> foo() {
throw Future.error('FooError');
}
私がドキュメントを読んだとき:
これは、「catch」ブロックの非同期版です。
catchブロックを使用すると、エラーが発生します。しかし、私catchErrorはエラーをキャッチすることができませんが、ドキュメントによると、それはすべきです。私は何か間違ったことをしていますか?
注:return代わりに使用できることはわかっています。@ CopsOnRoadで説明さthrowれcatchErrorているように、エラーが検出されます。私の質問は、なぜcatchErrorスローされたエラーをcatchキャッチしないのに、ブロックはそれをキャッチするのかということです。
回答
1 ChristopherMoore Aug 24 2020 at 22:11
foo()をFuture呼び出し元に返す前にエラーをスローします。したがって、それが機能していないわけでcatchErrorはなく、エラーが呼び出し元に戻されないだけです。
あなたがマークした場合fooのようにasyncその機能が実際に返すことFutureは、エラーがキャッチされていることがわかります。
void main() {
foo().catchError((error) {
print('Error caught = $error');
});
}
Future<void> foo() async {
throw Future.error('FooError');
}
リンクされた投稿の承認された回答から、キャッチできるasyncaFutureが実際に返されるように、それらの関数がマークされていることがわかりますcatchError。
Future<void>マークを付けasyncずに戻り、リテラル型を返さない関数があるFuture<void>と、エラーになるはずです。