修复logic after response实际是同步逻辑问题

This commit is contained in:
白茶清欢 2025-02-28 18:18:03 +08:00
parent 84f0e1a4f6
commit c826166256

@ -47,6 +47,7 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
return
}
isSuccess := false
// 初始化响应之后logic
logicAfterResponse := &define.LogicAfterResponse{
SuccessHookFuncList: make([]func(), 0),
@ -55,7 +56,24 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
}
// 此处暴露出去,是为了使用方可以获取到对应数据
ctx.Set(define.LogicAfterResponseKey, logicAfterResponse)
defer func() {
go func() {
defer recover()
if isSuccess {
for _, itemFunc := range logicAfterResponse.SuccessHookFuncList {
if nil != itemFunc {
itemFunc()
}
}
} else {
for _, itemFunc := range logicAfterResponse.FailureHookFuncList {
if nil != itemFunc {
itemFunc()
}
}
}
}()
}()
// 执行逻辑
inputValue := reflect.ValueOf(formValue)
if uriCfg.FormDataType.Kind() != reflect.Ptr {
@ -64,13 +82,8 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
resList := uriCfg.ApiLogicFunc.Func.Call([]reflect.Value{uriCfg.ApiStructValue, reflect.ValueOf(ctx), inputValue})
if resList[1].IsNil() {
// 请求成功
isSuccess = true
response.Success(ctx, resList[0].Interface())
// 执行成功之后的逻辑
for _, item := range logicAfterResponse.SuccessHookFuncList {
if item != nil {
item()
}
}
return
}
// 请求失败
@ -84,12 +97,6 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
})
}
response.SendWithException(ctx, e, nil)
// 执行失败之后的逻辑
for _, item := range logicAfterResponse.FailureHookFuncList {
if item != nil {
item()
}
}
return
}
}