Merge pull request #1011 from Astone-Chou/master
optimize: a better way for return error
This commit is contained in:
		| @@ -343,27 +343,22 @@ func (g *grpcServer) processRequest(stream grpc.ServerStream, service *service, | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// define the handler func | 		// define the handler func | ||||||
| 		fn := func(ctx context.Context, req server.Request, rsp interface{}) error { | 		fn := func(ctx context.Context, req server.Request, rsp interface{}) (err error) { | ||||||
| 			ch := make(chan error, 1) |  | ||||||
| 			defer close(ch) |  | ||||||
|  |  | ||||||
| 			defer func() { | 			defer func() { | ||||||
| 				if r := recover(); r != nil { | 				if r := recover(); r != nil { | ||||||
| 					log.Log("panic recovered: ", r) | 					log.Log("panic recovered: ", r) | ||||||
| 					log.Logf(string(debug.Stack())) | 					log.Logf(string(debug.Stack())) | ||||||
| 					ch <- errors.InternalServerError("go.micro.server", "panic recovered: %v", r) | 					err = errors.InternalServerError("go.micro.server", "panic recovered: %v", r) | ||||||
| 				} | 				} | ||||||
| 			}() | 			}() | ||||||
| 			returnValues = function.Call([]reflect.Value{service.rcvr, mtype.prepareContext(ctx), reflect.ValueOf(argv.Interface()), reflect.ValueOf(rsp)}) | 			returnValues = function.Call([]reflect.Value{service.rcvr, mtype.prepareContext(ctx), reflect.ValueOf(argv.Interface()), reflect.ValueOf(rsp)}) | ||||||
|  |  | ||||||
| 			// The return value for the method is an error. | 			// The return value for the method is an error. | ||||||
| 			if err := returnValues[0].Interface(); err != nil { | 			if rerr := returnValues[0].Interface(); rerr != nil { | ||||||
| 				ch <- err.(error) | 				err = rerr.(error) | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			ch <- nil | 			return err | ||||||
|  |  | ||||||
| 			return <-ch |  | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// wrap the handler func | 		// wrap the handler func | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user