sagas.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import {SIGNUP, SEND_MAIL_AGAIN} from './constants'
  2. import { signupSuccess, signupError, sendMailAgainSuccess, sendMailAgainFail } from './actions'
  3. import request from 'utils/request'
  4. import api from 'utils/api'
  5. import { errorHandler } from 'utils/util'
  6. import { call, put, all, takeLatest } from 'redux-saga/effects'
  7. export function* signup (action) {
  8. const {username, email, password, resolve} = action.payload
  9. try {
  10. const asyncData = yield call(request, {
  11. method: 'post',
  12. url: api.signup,
  13. data: {
  14. username,
  15. email,
  16. password
  17. }
  18. })
  19. const resPayload = asyncData.payload
  20. yield put(signupSuccess())
  21. resolve(resPayload)
  22. } catch (err) {
  23. yield put(signupError())
  24. errorHandler(err)
  25. }
  26. }
  27. export function* sendMailAgain (action) {
  28. const {email, resolve} = action.payload
  29. try {
  30. const asyncData = yield call(request, {
  31. method: 'post',
  32. url: `${api.signup}/sendmail`,
  33. data: {
  34. email
  35. }
  36. })
  37. const msg = asyncData.header.msg
  38. yield put(sendMailAgainSuccess())
  39. resolve(msg)
  40. } catch (err) {
  41. yield put(sendMailAgainFail())
  42. errorHandler(err)
  43. }
  44. }
  45. export default function* rootGroupSaga () {
  46. yield all([
  47. takeLatest(SIGNUP, signup as any),
  48. takeLatest(SEND_MAIL_AGAIN, sendMailAgain as any)
  49. ])
  50. }