action-promise.js 765 B

123456789101112131415161718192021222324252627282930313233
  1. export default function actionPromise(name, promise) {
  2. const actionPending = (name) => ({
  3. type: "PROMISE",
  4. status: "PENDING",
  5. name,
  6. });
  7. const actionFulfilled = (name, payload) => ({
  8. type: "PROMISE",
  9. status: "FULFILLED",
  10. name,
  11. payload,
  12. });
  13. const actionRejected = (name, error) => ({
  14. type: "PROMISE",
  15. status: "REJECTED",
  16. name,
  17. error,
  18. });
  19. return async dispatch => {
  20. try {
  21. dispatch(actionPending())
  22. let payload = await promise
  23. dispatch(actionFulfilled(name, payload));
  24. return payload
  25. }
  26. catch (error) {
  27. dispatch(actionRejected(name, error))
  28. }
  29. }
  30. }