Perché catchError non è in grado di rilevare l'errore?
void main() {
foo().catchError((error) {
print('Error caught = $error');
});
}
Future<void> foo() {
throw Future.error('FooError');
}
Mentre leggo i documenti :
Questo è l'equivalente asincrono di un blocco "catch".
Se uso il catchblocco, l'errore viene rilevato. Ma il mio catchErrornon è in grado di rilevare l'errore, ma secondo i documenti dovrebbe. Sto facendo qualcosa di sbagliato?
Nota: so che posso usare al returnposto di throwe l'errore verrà quindi catturato catchErrorcome dichiarato da @CopsOnRoad qui . La mia domanda è perché catchErrornon sta rilevando un errore generato ma il catchblocco lo cattura.
Risposte
foo()genera un errore prima di restituire il Futureal chiamante. Quindi non catchErrorè che non funzioni , l'errore non viene semplicemente restituito al chiamante.
Se contrassegni foocome in asyncmodo che la funzione restituisca effettivamente a Future, vedrai che l'errore viene rilevato.
void main() {
foo().catchError((error) {
print('Error caught = $error');
});
}
Future<void> foo() async {
throw Future.error('FooError');
}
Vedrai dalla risposta accettata del tuo post collegato che la loro funzione è contrassegnata in asyncmodo che Futurevenga effettivamente restituito un che catchErrorpuò catturare.
Avere una funzione che ritorna Future<void>senza essere contrassegnata asynce non restituisce un tipo letterale Future<void>dovrebbe essere davvero un errore.