-
Notifications
You must be signed in to change notification settings - Fork 0
/
parallelsWithPromise.js
44 lines (37 loc) · 1.56 KB
/
parallelsWithPromise.js
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
const getLuke = fetch("https://swapi.dev/api/people?name=luke")
const getLeia = fetch("https://swapi.dev/api/people?name=leia")
const getDarth = fetch("https://swapi.dev/api/people?name=darth")
Promise.all([getLuke, getLeia, getDarth]).then(characters => {
logCharacters(characters)
})
function logCharacters(characters) {
characters.forEach(character => console.log(character))
}
const promiseError = new Promise((resolve, reject) => {
setTimeout(() => reject(new Error('Something went wrong')), 500);
});
Promise.all([getDarth, promiseError, getLeia])
.then(values => {
// This block will not be executed because one of the promises is rejected
})
.catch(error => {
console.error(error);
});
// Então se eu quiser que não aconteça um catch mesmo se der erro chamando uma das promises, eu posso usar o allSettled
Promise.allSettled([getLuke, promiseError, getDarth]).then(characters => {
// então aqui o logCharacters vai receber um array diferente, ele vai receber um array com status da promise: settled ou rejected e o valor
/*
* pense no objeto:
* {
status: 'fulfilled' | 'rejected',
value: any
}
* então a promise getLuke vai retornar status: 'fulfilled' e a info do personagem
* mas a promiseError vai retornar status: 'rejected' e o objeto de erro
* */
logCharacters(characters)
})
/*
MUITO IMPORTANTE QUE A PROMISE.ALLSettled NÃO TEM ORDEM DE RETORNO!
DIFERENTE DO PROMISE.ALL, então no promise.allSettled o que retornar primeiro, vai ficar primeiro no array
*/