React redux Redux Saga多次执行产量调整

React redux Redux Saga多次执行产量调整,react-redux,axios,redux-saga,React Redux,Axios,Redux Saga,我正在与我传奇故事中的奇怪行为作斗争 故事很简单。用户单击按钮并发送“generateUserPassword”操作 我的传奇故事采取了这一行动,应该只调用一次密码生成,但会多次调用。我没有后端,所以我得到404HTTP响应,并在saga中捕获一个异常。然后,在handleGenerationFailed()中调度和处理generateUserPasswordFailed操作 下面是http调用: export type PasswordGenerateRequest = { email:

我正在与我传奇故事中的奇怪行为作斗争

故事很简单。用户单击按钮并发送“generateUserPassword”操作

我的传奇故事采取了这一行动,应该只调用一次密码生成,但会多次调用。我没有后端,所以我得到404HTTP响应,并在saga中捕获一个异常。然后,在handleGenerationFailed()中调度和处理generateUserPasswordFailed操作

下面是http调用:

export type PasswordGenerateRequest = {
  email: string
}

export const callPasswordGenerate = async (request: PasswordGenerateRequest): Promise<unknown> => {
  const response = await axios.post(`/passCreate`, request)
  return response.data
}

在catch子句中放入console.log时:

function* generateUserPassword(action: GenerateUserPassword): unknown {
  const request: PasswordGenerateRequest = { email: action.email }
  try {
    yield callPasswordGenerate(request)
    yield put(userPasswordGenerated())
  } catch (e) {
    console.log('exception')
    yield put(generateUserPasswordFailed())
  }
}
它只记录一次:

请帮助我理解这一点。 提前谢谢

export type PasswordGenerateRequest = {
  email: string
}

export const callPasswordGenerate = async (request: PasswordGenerateRequest): Promise<unknown> => {
  const response = await axios.post(`/passCreate`, request)
  return response.data
}
function* generateUserPassword(action: GenerateUserPassword): unknown {
  const request: PasswordGenerateRequest = { email: action.email }
  console.log('generate user password called')
  try {
    yield callPasswordGenerate(request)
    yield put(userPasswordGenerated())
  } catch (e) {
    yield put(generateUserPasswordFailed())
  }
}
function* generateUserPassword(action: GenerateUserPassword): unknown {
  const request: PasswordGenerateRequest = { email: action.email }
  try {
    yield callPasswordGenerate(request)
    yield put(userPasswordGenerated())
  } catch (e) {
    console.log('exception')
    yield put(generateUserPasswordFailed())
  }
}