Je cherchais un moyen de comprendre ce problème et m'excuser si mes compétences de recherche ne sont pas à la hauteur.Chaîne .then fonctions dans ES6 chercher appel
Mon numéro: Je récupère une API et je veux savoir quand toutes les données ont été entièrement chargées. En lisant les documents, il semble que je puisse enchaîner les déclarations .then avec fetch et je pensais que cela fonctionnerait. Mais, il semble qu'ils semblent tous tirer en même temps sans attendre le précédent.
Voici mon code:
fetch(myUrl, {
method: 'post',
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
credentials: 'include',
body: data
})
.then(fetchStatus)
.then(json)
.then(function(msg){
showSearchResults();
setTimeout(function(){ console.log("Next then should fire after this"); }, 4000);
})
.then(function(){
return console.log("The 2nd is firing!");
});
function fetchStatus(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
return Promise.reject(new Error(response.statusText))
}
}
function json(response) {
return response.json()
}
C'est grand si elle est asynchrone, mais ces événements doivent être synchrones en raison du fait que je suis en train de travailler avec le contenu créé par le précédent appel, showSearchResults();
Toute aide est très appréciée.
Si vous utilisez ES6 ne pas oublier le 'msg => {... } 'notation de fonction. Il peut économiser beaucoup de verbosité et évite la danse 'var self = this'. – tadman
essayez d'emballer 'showSearchResults' dans Promise.all et attendez que cela se résolve – maioman
On ne sait pas quel est le problème ici. Vous avez un seul appel 'fetch', et chaque gestionnaire de cette chaîne ne s'exécute que lorsque le précédent s'exécute. Quel est le problème, exactement? (De plus: ne devriez-vous pas fournir une sorte d'argument à 'showSearchResults'?) –