Theo-Dancoisne / pokedex

utiliser une api + vuejs
0 stars 0 forks source link

[INFO]: Promise, asynchrone et gestion d'erreur #4

Open kiuKisas opened 2 years ago

kiuKisas commented 2 years ago

Alors, c'est un sujet un peu poussé du javascript, c'est pas du tout une priorité, mais je vais essayer de t'en parler simplement.

Javascript est un language asynchrone, c'est a dire qu'il est capable de stoper l'execution du programme, pour faire une autre partie, et revenir après dedans. C'est essentiel pour faire des interface dynamique, mais aujourd'hui les frameworks (react, vue.js) poussent le truc un peu plus loins et tu n'as pas forcément besoins de tout faire a la main.

Quoi qu'il en soit:

Une fonction asynchrone renvois en réalité toujours une Promise. Une promise peut avoir 3 états: en cours, réussi ou échec. D'ou le nom "promesse".

Pour executer du code apres que la promise soit réussi, tu utilises then, catch quand ça failed, finally pour executer apres, quoi qu'il arrive; bref ça tu connais ;).

Du coup si tu veux:

async function test() {
  return Promise.resolve('coucou')
}

async function test() {
  return new Promise((resolve, reject) => {
    resolve('coucou')
  })
}

async function test() {
  return 'coucou'
}

function test() {
  return Promise.resolve('coucou')
}

Bah c'est la meme chose en fait. Pareil, dans une fonction async, si tu return une erreur, c'est un Promise.reject qui est renvoyé. Du coup:

 async function test() {
  return Promise.reject(new Error('coucou'))
}

async function test() {
  return new Promise((resolve, reject) => {
    reject(new Error('coucou'))
  })
}

async function test() {
  return new Error('coucou')
}

Bah c'est la meme chose aussi ! Tu as également le mechanisme de try/catch en javascript, ou la tu vas "throw" une nouvelle erreur pour "activer" le catch. Bon c'est des choix, moi je te conseillerais de rester sur les promise et de les utiliser comme mécanisme de gestion d'erreur meme quand tu n'as pas besoins d'asynchrone, mais libre à toi de partir sur les try/catch plutot ;)