J'ai une chaîne de promesse simplifiée se présente comme suit:conditionnellement commencer une chaîne de promesse d'une promesse spécifique
readDB(file)
.then(parseQuery)
.catch((err) => console.error(err))
.then(selectRandom)
.catch((err) => console.error(err))
.then(requestTrailer)
.catch((err) => {
if(err == 'Got error: No results found') {
throw new Error(err);
}
})
.then(renderMovie)
.catch((err) => console.error(err));
Fondamentalement, je lis une liste de films à partir d'un fichier et de les transmettre autour de sorte que je peux Trouver une bande-annonce pour le film. Ce que je wan't à faire est en cas d'erreur, répétez la chaîne de promesse à partir de selectRandom
sur, sans avoir à readDB
et parseQuery
En ce moment, j'ai un code de travail, mais il définit deux fois la chaîne:
//I wrap the second round of promises in a function
selectMovie(){
selectRandom(movies)
.then(requestTrailer)
.catch((err) => {
if(err == 'Got error: No results found') {
selectMovie(); //Start the function again
throw new Error(err);
}
})
.then(renderMovie)
.catch((err) => console.error(err));
}
//Now start the promise chain
readDB(file)
.then(parseQuery)
.catch((err) => console.error(err))
.then(selectRandom)
.catch((err) => console.error(err))
.then(requestTrailer)
.catch((err) => {
if(err == 'Got error: No results found') {
selectMovie(); //Start second round
throw new Error(err);
}
})
.then(renderMovie)
.catch((err) => console.error(err));
Existe-t-il une manière plus simple de faire cela?
On dirait que vous voulez juste sécher votre code, mais vous avez partiellement fait cela soit je suis malentendu ou vous manquez l'évidence. Ne pourriez-vous pas simplement remplacer une partie du code en bas par 'selectMovie()'? –
Comme readDB puis parseQuery puis sélectionnez Movie()? Devrait sélectionner le film avoir le mot-clé de retour? Ou juste comme est? – medicengonzo
Je ne pense pas que 'selectMovie()' _s'agisse d'une instruction return à moins que vous ne vouliez ajouter plus de chaînes de promesses par la suite, mais c'est généralement une bonne idée de renvoyer _something_. Mais oui, déplacez-le, essayez, et voyez ce qui se passe. –