Redux异步操作:将初始调度放入try块会有什么不同吗?
假设我正在使用redux异步操作进行一个非常通用的api调用。有一个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过程中发生的事情正在其他地方
“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))
}
}