3 votes

Quand dois-je utiliser yield* vs yield dans redux-saga ?

Je veux appeler une autre saga à partir d'une saga.

La saga est bien sûr une fonction générateur et est asynchrone.

Devrais-je jamais utiliser yield * ou devrais-je toujours utiliser yield?

function* mySaga({ payload: { id, name } }) {
    yield myOtherAsyncSaga(); // quand utiliser yield *?
}

6voto

Vladislav Ihost Points 893

La saga est bien sûr une fonction génératrice, et est asynchrone.
Faut-il jamais utiliser yield * ou faut-il toujours utiliser yield?

Pour répondre complètement à une question, il est d'abord nécessaire de comprendre comment les sagas, middlewares, gestionnaires de processus et les fonctions génératrices fonctionnent généralement. En fait, redux-saga implémente deux côtés: un middleware pour le store redux, qui intercepte et injecte des actions personnalisées, et un gestionnaire de processus asynchrones, qui possède son propre domaine de rappel de tic et aide à effectuer des actions asynchrones.

Ensuite, chaque fonction saga implémentée par le client est simplement un créateur d'effets. En fait, la fonction saga client est implémentée de telle manière qu'elle ne fait en réalité rien d'autre que la création d'effets - call, take, put, etc. De plus, une saga n'est pas synchrone ou asynchrone par nature - elle délègue simplement certains comportements au gestionnaire de processus saga, et effectue les actions demandées - par exemple, l'attente d'une promesse.
Bien sûr, vous pouvez gérer manuellement les promesses/asynchrone dans une saga client, mais de telles actions sortiront du cycle d'événements de la saga.

Ainsi, les internes de redux-saga attendent simplement de la saga client qu'elle soit un itérateur, qui renvoie des effets appropriés et peut-être stocke certaines informations dans le contexte d'activation de la fermeture - dans le cas des processus de saga de type while(true). Il n'y a donc aucun cas d'utilisation dans redux-sagayield * est obligatoire, puisque yield * est simplement une ré-délégation de l'itérateur subséquent au niveau supérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X