Comment gérer la si-sinon dans la promesse, alors?
Dans certains cas, quand je reçois une valeur de retour d'une promesse d'objet, j'ai besoin de lancer deux then()
precesses dépendent de la valeur de la condition, comme:
promise().then(function(value){
if(//true) {
//do something
} else {
//do something
}
})
Je pense peut-être que je peux l'écrire comme:
promise().then(function(value){
if(//true) {
//call a new function which will return a new promise object
ifTruePromise().then();
} else {
ifFalsePromise().then();
}
})
mais avec cela, j'ai deux questions:
-
Je ne suis pas sûr si c'est une bonne idée de commencer une nouvelle promesse, puis de traiter en une promesse;
-
que faire si j'ai besoin de deux processus d'appel d'une fonction dans le dernier? Cela signifie qu'ils ont la même "terminal"
J'ai essayé de retourner la nouvelle promesse de garder l'original de la chaîne comme:
promise().then(function(value){
if(//true) {
//call a new function which will return a new promise object
//and return it
return ifTruePromise();
} else {
//do something, no new promise
//hope to stop the then chain
}
}).then(//I can handle the result of ifTruePromise here now);
mais dans ce cas, si c'est vrai ou faux, la prochaine then
fonctionne.
ALORS, quelle est la meilleure pratique à manipuler?
- peut-être que c'est ce que vous êtes à la recherche pour stackoverflow.com/questions/26599798/... ?
Vous devez vous connecter pour publier un commentaire.
Aussi longtemps que vos fonctions de retour d'une promesse, vous pouvez utiliser la première méthode que vous suggérez.
Le violon ci-dessous montre comment vous pouvez prendre différentes chaînage des chemins en fonction de ce que la première valeur résolue sera.
JS:
Vous pouvez également faire une conditionnelle chaînage, affecter le retour promesse à une variable, puis continuez d'exécuter les fonctions qui doivent être exécutées dans les deux cas.
J'ai écrit un paquet simple, conditionnel promesse d'utilisation.
Si vous voulez le vérifier:
mnp page:
https://www.npmjs.com/package/promise-tree
et github:
https://github.com/shizongli94/promise-tree
En réponse à des commentaires demandant comment le paquet de résoudre le problème:
1, Il a deux objets.
2, de la Direction générale de l'objet dans ce package est un emplacement de stockage temporaire pour les fonctions telles que onFulfilled et onRejected que vous souhaitez utiliser à l'époque() ou catch(). Il a des méthodes comme l'époque() et catch() qui prennent les mêmes arguments que les homologues de la Promesse. Quand vous passez par un rappel de la Direction générale.alors() ou de la Branche.catch(), utilisez la même syntaxe que la Promesse.alors() et de la Promesse.catch(). Puis ne rien faire mais en les stockant les rappels dans un tableau.
3, la Condition est un objet JSON qui stocke les conditions et d'autres informations pour la vérification et de la ramification.
4, Vous spécifiez les conditions (expression booléenne) à l'aide de la condition de l'objet de la promesse de rappels. Condition puis stocke les informations que vous transmettez. Après toutes les informations nécessaires sont fournies par l'utilisateur, l'état de l'objet utilise une méthode pour construire complètement nouvelle Promesse objet qui prend la promesse de la chaîne et de rappel des informations déjà stockées dans l'objet de Branche. Un peu délicat est ici que vous (en tant que maître d'oeuvre, pas l'utilisateur) ont à résoudre ou de rejeter la Promesse de la première construit manuellement avant d'enchaîner la stockées rappels. C'est parce que, sinon, la nouvelle promesse de la chaîne ne peut pas démarrer.
5, Grâce à la boucle d'événements, de la Direction générale des objets peut être instancié avant ou après vous avez une tige Promesse de l'objet et ils ne seront pas interférer les uns avec les autres. J'utilise le terme "direction" et de "souches" ici, parce que la structure ressemble à un arbre.
Exemple de code peut être trouvé sur les deux mnp et github pages.
Par ailleurs, cette application vous permet également d'avoir des succursales à l'intérieur d'une branche. Et les branches n'ont pas à être au même endroit que vous vérifier les conditions.
C'est la façon dont je l'ai fait dans mon fetch() je ne suis pas sûr si c'est la bonne voie, mais il fonctionne