Redux异步操作:将初始调度放入try块会有什么不同吗?

Redux异步操作:将初始调度放入try块会有什么不同吗?,redux,async-await,try-catch,dispatch,Redux,Async Await,Try Catch,Dispatch,假设我正在使用redux异步操作进行一个非常通用的api调用。有一个“INIT”调度和“SUCCESS”或“FAILURE”,与结果有关 将“INIT”分派放入try catch块中有什么区别吗? 选项A(在try catch块之外): 我想说这只是一个微妙的不重要的细节,但是几乎每次我写一个新的异步动作时,我都会花一分钟来考虑它……:/我通常避免认为事情不会抛出 如果它抛出怎么办?什么代码将处理它?您可能有一个外部try-catch块,但现在在doSomething过程中发生的事情正在其他地方

假设我正在使用redux异步操作进行一个非常通用的api调用。有一个
“INIT”
调度和
“SUCCESS”
“FAILURE”
,与结果有关

“INIT”
分派放入
try catch
块中有什么区别吗?

选项A(在
try catch
块之外):


我想说这只是一个微妙的不重要的细节,但是几乎每次我写一个新的异步动作时,我都会花一分钟来考虑它……:/

我通常避免认为事情不会
抛出

如果它抛出怎么办?什么代码将处理它?您可能有一个外部
try-catch
块,但现在在
doSomething
过程中发生的事情正在其他地方处理

我认为,由于您的函数/thunk正在“尝试”做某件事,它应该负责尝试捕获其生命周期中可能发生的任何事情。即使在理论上,这不会发生在那个时候

所以我通常选择B选项

export const doSomething = data => async dispatch => {
  try {
    dispatch(doSomethingInit()) // <-- inside the try block
    let response = await client.get("/api")
    if (response) {
      dispatch(doSomethingSuccess(response.data))
    }
  } catch (error) {
    console.error(error);                   // YOU MIGHT LOG IT HERE
    dispatch(doSomethingFailure(error))
  }
}
export const doSomething=data=>async dispatch=>{
试一试{

dispatch(doSomethingInit())//我认为
dispatch(doSomethingInit())
不应该抛出错误,所以最好不要将其放入try块。您可以将
wait client.get(“/api”)放入
在try块中,因为您希望它可以抛出错误并在catch中处理该错误。如果您在编写代码时没有使用
async
语法糖,您会编写:
dispatch(doSomethingInit());client.get(“/api”)。然后(happyHandler,errorHandler)
所以第一次分派不是错误处理程序应该处理的部分。@HMR是,
分派(doSomethingInit())
不应抛出–它用于更新UI和日志记录。正如您所说,它确实有意义。谢谢您。谢谢您的见解。您可能是对的,将所有函数调用放在
try catch
块中总是一个更好的选择(这意味着只需切换这两个LOC即可).因此,我宁愿选择B。
export const doSomething = data => async dispatch => {
  try {
    dispatch(doSomethingInit()) // <-- inside the try block
    let response = await client.get("/api")
    if (response) {
      dispatch(doSomethingSuccess(response.data))
    }
  } catch (error) {
    dispatch(doSomethingFailure(error))
  }
}
export const doSomething = data => async dispatch => {
  try {
    dispatch(doSomethingInit()) // <-- inside the try block
    let response = await client.get("/api")
    if (response) {
      dispatch(doSomethingSuccess(response.data))
    }
  } catch (error) {
    console.error(error);                   // YOU MIGHT LOG IT HERE
    dispatch(doSomethingFailure(error))
  }
}