C'est une question que les gens se posent souvent lorsqu'ils se lancent dans les promesses, moi y compris lorsque j'ai commencé. Cependant, d'abord...
C'est bien que tu essaies d'utiliser le nouveau API de récupération mais si j'étais vous, j'utiliserais une implémentation de XMLHttpRequest pour l'instant, comme jQuery AJAX ou l'implémentation surchargée de Backbone de l'algorithme de jQuery .ajax()
si vous utilisez déjà ces bibliothèques. La raison en est que l'API Fetch est encore très récente, et donc expérimentale à ce stade.
Cela dit, il est certain que les gens l'utilisent, mais je ne l'utiliserai pas dans mon propre code de production tant qu'il ne sera pas sorti du statut "expérimental".
Si vous décidez de continuer à utiliser fetch
il existe un polyfill disponible. NOTE : vous devez passer par des étapes supplémentaires pour que la gestion des erreurs fonctionne correctement et pour recevoir des cookies du serveur. Si vous chargez déjà jQuery ou si vous utilisez Backbone, restez-en là pour l'instant ; ce n'est pas complètement redoutable, de toute façon.
Passons maintenant au code :
Vous voulez un plat structure, sinon tu rates l'intérêt de Promesses. Il n'est pas sage d'imbriquer les promesses, nécessairement, parce que les promesses résolvent ce que les callbacks asynchrones imbriqués (callback hell) ne pouvaient pas faire.
Vous économiserez du temps et de l'énergie, et produirez moins de code bogué en utilisant simplement une structure de code plus lisible. Ce n'est pas tout, mais cela fait partie du jeu, pour ainsi dire.
Les promesses permettent au code asynchrone de conserver la plupart des propriétés perdues. du code synchrone, comme l'indentation plate et un canal d'exception canal.
-- Petka Antonov (Bluebird Promise Library)
// run async #1
asyncGetFn()
// first 'then' - execute more async code as an arg, or just accept results
// and do some other ops
.then(response => {
// ...operate on response data...or pass data onto next promise, if needed
})
// run async #2
.then(asyncGetAnotherFn)
.then(response => {
// ...operate on response data...or pass data onto next promise, if needed
})
// flat promise chain, followed by 'catch'
// this is sexy error handling for every 'then' above
.catch(err => {
console.error('Request failed', err)
// ...raise exeption...
// ... or, retry promise...
})