web-dev-qa-db-fra.com

Différence entre yield [] et yield all () - ES6 / redux-saga

Y a-t-il un avantage à utiliser la yield all([]) de redux-saga par rapport à ES6 Intégré à yield []?

Pour exécuter plusieurs opérations en parallèle, redux-saga suggère:

const result = yield all([
  call(fetchData),
  put(FETCH_DATA_STARTED),
]);

Mais la même chose peut être accomplie sans la méthode all():

const result = yield [
  call(fetchData),
  put(FETCH_DATA_STARTED),
];

Laquelle est la meilleure et pourquoi?

9
Ali Saeed

Il n'y a pas de différence fonctionnelle, comme l'explique Mateusz Burzyński (mainteneur redux-saga) ici :

Sous le capot, ils sont tous les deux identiques, yield [...effects] Entraînera cependant un avertissement de dépréciation et vous informera sur all.

Ceci a été introduit pour rendre le comportement parallèle explicite et il reflète bien Promise.all

Il est préférable d'utiliser all() car cela informe le lecteur que nous produisons plus d'un effet ici, mais les diverses utilisations du rendement fonctionneront toujours sans:

produisant un objet aux effets multiples

const { company, profile } = yield {
  company: select(getCompany),
  profile: select(getUserProfile, userId),
};

produisant un littéral de tableau

yield [
  put(userRequestSucceeded(userId)),
  put(userReceived(response.data)),
];

produisant un tableau à l'aide d'une carte

yield userIds.map(userId => call(fetchUserDetails, userId));
9
Ali Saeed