-
Notifications
You must be signed in to change notification settings - Fork 1
/
functions.ts
104 lines (78 loc) · 2.19 KB
/
functions.ts
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
function getNumber(): number {
return 50;
}
const getNumberArrow = (): number => {
return 20;
};
const multiplica = (num1: number, num2: number): number => {
return num1 * num2;
};
const parametroOpcional = (obrigatorio: number, opcional?: string) => {
/*
* Boa prática: sempre teste parametros opcionais
*/
if (opcional) {
}
};
const calculaIMC = (massa: number, altura?: number): number => {
const alturaMedia = 1.6;
if (!altura) {
return massa / multiplica(alturaMedia, alturaMedia);
}
return massa / multiplica(altura, altura);
};
/*
* Funções sem retorno, tipo void
*/
const valor: number = 5; // tenho um valor
let result: number;
const voidFunc = (x: number): void => {
// quero multiplicar o valor por X
result = valor * x;
};
/*
* Funções assincronas e seus retornos
*/
const chamaAPI = (): Promise<number> => {
return fetch("/api/numero").then((result) => result.json());
};
/*
* Funções assincronas não bloqueiam a execução
*/
let numero: number;
//chamando a função
chamaAPI().then((num: number) => (numero = num));
// Numero estará vazio, pois o fluxo assincrono está executando em paralelo
console.log(numero);
const chamaAPIAsync = async (): Promise<number> => {
const result = await fetch("/api/numero").then((result) => result.json());
return result;
};
/*
* Más praticas de async/await
* 1. Chain de async/await (inception de bloqueio)
*/
const chamaAPIAsyncNumero2 = async (): Promise<number> => {
const result = await fetch("/api/numero2").then((result) => result.json());
return result;
};
const multiplicaAsync = async (): Promise<number> => {
const num1 = await chamaAPIAsync();
const num2 = await chamaAPIAsyncNumero2();
return num1 * num2;
};
/*
* Solução
* 1. Chain de async/await (inception de bloqueio)
*/
const chamaAPIANumero1 = async (): Promise<number> => {
return fetch("/api/numero").then((result) => result.json());
};
const chamaAPIANumero2 = async (): Promise<number> => {
return fetch("/api/numero2").then((result) => result.json());
};
const multiplicaApi = async (): Promise<number> => {
const num1 = await chamaAPIANumero1();
const num2 = await chamaAPIANumero2();
return num1 * num2;
};