Theo-Dancoisne / pokedex

utiliser une api + vuejs
0 stars 0 forks source link

[INFO rapido]: Les promises chainée #5

Open kiuKisas opened 2 years ago

kiuKisas commented 2 years ago

un truc cool avec les promises, c'est que tu peux les chainer. Par exemple:

const getSuperDataFromData = async (data) => 'super_' + data.name 
const wowAmazing = async (superData) => console.log(`Wow ${superData} !`)
...

async function test(data) {
  return dosomething()
    .then((data) => getSuperDataFromData(data))
    .then((superData) => wowAmazing(superData))
    .catch(e => erreurInSomethingOrGetSuperDataOrWowAmazing(e))
    .finally(() => alwaysExecuteAfter())
}

Tu n'as pas besoins d'ajouter un catch et/ou finally a chaque etapes :) D'ailleurs dans cet exemple, comme mes fonctions ne prennent qu'un parametre, je peux directement les appeller sans faire de fonction anonyme. (fonction anonyme ou arrow fonction, c'est ça: () => 'something') Du coup tu pourrais avoir:

async function test(data) {
  return dosomething()
    .then(getSuperDataFromData)
    .then(wowAmazing)
    .catch(erreurInSomethingOrGetSuperDataOrWowAmazing)
    .finally(alwaysExecuteAfter)
}

Je trouve ça super clean pour suivre l'execution du programme tout en gérant les erreurs :) Mais bon encore une fois, c'est une direction et y'en a d'autre ;)

D'ailleurs, j'aurais pu écrire:

async function test(data) {
  return Promise.resolve(dosomething()
    .then(getSuperDataFromData)
    .then(wowAmazing)
    .catch(erreurInSomethingOrGetSuperDataOrWowAmazing)
    .finally(alwaysExecuteAfter)
  )
}

Mais ça serait redondant d'écrire Promise.resolve. Voila voila !