修复logic after response实际是同步逻辑问题
This commit is contained in:
parent
84f0e1a4f6
commit
c826166256
@ -47,6 +47,7 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isSuccess := false
|
||||||
// 初始化响应之后logic
|
// 初始化响应之后logic
|
||||||
logicAfterResponse := &define.LogicAfterResponse{
|
logicAfterResponse := &define.LogicAfterResponse{
|
||||||
SuccessHookFuncList: make([]func(), 0),
|
SuccessHookFuncList: make([]func(), 0),
|
||||||
@ -55,7 +56,24 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
|
|||||||
}
|
}
|
||||||
// 此处暴露出去,是为了使用方可以获取到对应数据
|
// 此处暴露出去,是为了使用方可以获取到对应数据
|
||||||
ctx.Set(define.LogicAfterResponseKey, logicAfterResponse)
|
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)
|
inputValue := reflect.ValueOf(formValue)
|
||||||
if uriCfg.FormDataType.Kind() != reflect.Ptr {
|
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})
|
resList := uriCfg.ApiLogicFunc.Func.Call([]reflect.Value{uriCfg.ApiStructValue, reflect.ValueOf(ctx), inputValue})
|
||||||
if resList[1].IsNil() {
|
if resList[1].IsNil() {
|
||||||
// 请求成功
|
// 请求成功
|
||||||
|
isSuccess = true
|
||||||
response.Success(ctx, resList[0].Interface())
|
response.Success(ctx, resList[0].Interface())
|
||||||
// 执行成功之后的逻辑
|
|
||||||
for _, item := range logicAfterResponse.SuccessHookFuncList {
|
|
||||||
if item != nil {
|
|
||||||
item()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 请求失败
|
// 请求失败
|
||||||
@ -84,12 +97,6 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
response.SendWithException(ctx, e, nil)
|
response.SendWithException(ctx, e, nil)
|
||||||
// 执行失败之后的逻辑
|
|
||||||
for _, item := range logicAfterResponse.FailureHookFuncList {
|
|
||||||
if item != nil {
|
|
||||||
item()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user