-
Notifications
You must be signed in to change notification settings - Fork 0
/
3-future.dart
54 lines (47 loc) · 1.5 KB
/
3-future.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import 'dart:async';
void main() {
buscarTextoComFuture();
buscarTextoComAsyncAwait();
}
void buscarTextoComFuture() {
print("buscarTextoComFuture:");
var deveFalhar = false;
buscarTexto(deveFalhar)
.then((texto) => print(texto))
.catchError((erro) => print('Erro: $erro'))
.whenComplete(() => print('Executa sempre.'));
deveFalhar = true;
buscarTexto(deveFalhar)
.then((texto) => print(texto))
.catchError((erro) => print('Erro: $erro'))
.whenComplete(() => print('Executa sempre.'));
}
Future<String> buscarTexto(bool deveFalhar) {
Future<String> promise = Future<String>.delayed(Duration(seconds: 3), () {
if (deveFalhar) {
throw ("Algum erro aleatório.");
}
return "Texto buscado";
});
return promise;
}
void buscarTextoComAsyncAwait() async {
print('buscarTextoComAsyncAwait:');
String texto = await buscarTexto(false);
print('AsyncAwait ' + texto);
try {
texto = await buscarTexto(true);
} catch (erro) {
print('Erro: $erro no async await.');
} finally {
print('Executa sempre no async await.');
}
}
/**
* Conclusões:
* - Future funciona como a promise do Javascript.
* - É possível usar interpolação de variáveis em string como em 'Erro: $erro'.
* - Async Await é uma forma de escrever código asíncrono porém com legibilidade de código síncrono.
* - Await deve vir antes de uma função ou método que retorna um Future.
* - Exceções são capturadas no await com são capturadas em código síncrono.
*/