修复logic after response实际是同步逻辑问题
This commit is contained in:
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
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user