Envoyé par
deathdigger
J'aime bien la dernière version, ça permet de ne pas passer par un "objet intermédiaire", merci !
À noter que la première version que j'avais proposé faisait la même chose.
J'ai juste remplacé un await pas le finally.
D'ailleurs le "finally" ici pourrait tout à fait être remplacé par un "then" vu qu'on veut catch les erreurs avant.
Envoyé par
deathdigger
Par contre, pour le Promise.all, il ne s'exécute que si tout est résolu. Mais imaginons que getData2 envoie une erreur non bloquante. Si je veux mettre 0 à TUTU dans ce cas, il faut que je fasse un resolve({TUTU=0}), je ne peux pas faire un reject({TUTU=0}), c'est bien ça ?
Faut que tu catches l'erreur de ton "getData2" :
Code:
this.getData().then(items =>
Promise.all(items.map(item =>
this.getData2(item.TOTO, '001')
.then(y => ({...item, TATA: '001', TUTU: y.TUTU}))
.catch(() => ({...item, TATA: '001', TUTU: 0}))
)
).then(result => this.datagrid.dataset = result)
À noter que si TUTU n'a pas de valeur valide lors du catch mieux vaut lui mettre comme valeur undefined ou null.
Mais ça va dépendre de ton code métier ça, c'est peut être tout à fait logique d'avoir 0 dans ce cas.
Envoyé par
deathdigger
Question subsidiaire: le ...item, ça veut dire quoi ? C'est un pointeur ?
Comme l'a dit Fastela, c'est le spread operator.
Je te conseille d'apprendre son fonctionnement car c'est quelque chose que tu peux rencontrer très souvent dans le JS/TS moderne.
Ce qui se passe lorsque j'écris "{...item, TATA: '001', TUTU: y.TUTU}" :
1) je créé un nouvel objet (avec les {})
2) je colle dedans tous les membres de "item" (avec le "...item")
3) je déclares d'autres membres ("TATA: '001'"), si certains sont déjà présents dans l'étape 2 alors les valeurs sont écrasées
Là c'est on utilisation pour un objet.
Tu vas le trouver dans 5 autres cas principalement :
1) Pour faire la même chose avec des tableaux.
Code:
const toto = [1, 2]
const titi = [4]
const tutu = [...toto, 3, ...titi, 5]
// tutu vaut [1, 2, 3, 4, 5]
2) Pour destructurer partiellement un tableau
Code:
const toto = [1, 2, 3, 4]
const [titi, tutu, ...tata] = toto
// titi vaut 1, tutu vaut 2, tata vaut [3, 4]
3) Pour destructurer partiellement un objet
Code:
const toto = { tata: 1, titi: 2, tutu: 3 }
const { tata, ...tete } = toto
// tata vaut 1, tete vaut { titi: 2, tutu: 3 }
4) Pour récupérer les arguments d'une fonction dans un tableau
Code:
const maFonction = (...args) => {
console.log(args)
}
maFonction(1, 2, 3)
// args vaut [1, 2, 3]
C'est pratique pour les fonctions qui prennent un nombre non déterminé d'arguments (par exemple pour faire le max parmis N nombres)
5) À l'inverse pour passer un tableau en arguments distinct d'une fonction
Code:
const maFonction = (a, b, c, d) => {
console.log(a, b, c, d)
}
const args = [1, 2, 3]
maFonction(...args)
// a vaut 1, b vaut 2, c vaut 3, d vaut undefined
Envoyé par
William Vaurien
@Awake il faut que tu branches un nouvel expertCPC ici
Je viens de m'amuser à balancer vos questions et bouts de code dans chatGPT, c'est très impressionant !
Pas mal en effet, par contre la réponse devrait quand même prévenir que ça ne fait pas de copie en profondeur.