1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

fix(eventbus): update error handler to include topic information (#333)

* fix(eventbus): update error handler to include topic information

- Modified error handler signature to accept topic string and error
- Updated panic recovery logic to pass event topic to error handler
- Adjusted SetErrorHandler method parameter signature
- Updated example test to demonstrate new error handler usage
- Enhanced error handling test to verify topic information

* fix(eventbus): unit test
This commit is contained in:
chentong
2025-09-28 20:10:12 +08:00
committed by GitHub
parent 15a0dad0d8
commit 8fe56b6dc7
3 changed files with 8 additions and 7 deletions

View File

@@ -21,7 +21,7 @@ type EventBus[T any] struct {
// listeners map[string][]*EventListener[T] // listeners map[string][]*EventListener[T]
listeners sync.Map listeners sync.Map
mu sync.RWMutex mu sync.RWMutex
errorHandler func(err error) errorHandler func(topic string, err error)
} }
// EventListener is the struct that holds the listener function and its priority. // EventListener is the struct that holds the listener function and its priority.
@@ -117,7 +117,7 @@ func (eb *EventBus[T]) Publish(event Event[T]) {
func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event[T]) { func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event[T]) {
defer func() { defer func() {
if r := recover(); r != nil && eb.errorHandler != nil { if r := recover(); r != nil && eb.errorHandler != nil {
eb.errorHandler(fmt.Errorf("%v", r)) eb.errorHandler(event.Topic, fmt.Errorf("%v", r))
} }
}() }()
@@ -126,7 +126,7 @@ func (eb *EventBus[T]) publishToListener(listener *EventListener[T], event Event
// SetErrorHandler sets the error handler function. // SetErrorHandler sets the error handler function.
// Play: https://go.dev/play/p/gmB0gnFe5mc // Play: https://go.dev/play/p/gmB0gnFe5mc
func (eb *EventBus[T]) SetErrorHandler(handler func(err error)) { func (eb *EventBus[T]) SetErrorHandler(handler func(topic string, err error)) {
eb.errorHandler = handler eb.errorHandler = handler
} }

View File

@@ -189,8 +189,8 @@ func ExampleEventBus_GetListenersCount() {
func ExampleEventBus_SetErrorHandler() { func ExampleEventBus_SetErrorHandler() {
eb := NewEventBus[int]() eb := NewEventBus[int]()
eb.SetErrorHandler(func(err error) { eb.SetErrorHandler(func(topic string, err error) {
fmt.Println(err) fmt.Println(topic, err)
}) })
eb.Subscribe("event1", func(eventData int) { eb.Subscribe("event1", func(eventData int) {
@@ -200,7 +200,7 @@ func ExampleEventBus_SetErrorHandler() {
eb.Publish(Event[int]{Topic: "event1", Payload: 1}) eb.Publish(Event[int]{Topic: "event1", Payload: 1})
// Output: // Output:
// error // event1 error
} }
func ExampleEventBus_GetAllListenersCount() { func ExampleEventBus_GetAllListenersCount() {

View File

@@ -114,7 +114,8 @@ func TestEventBus_ErrorHandler(t *testing.T) {
eb := NewEventBus[string]() eb := NewEventBus[string]()
eb.SetErrorHandler(func(err error) { eb.SetErrorHandler(func(topic string, err error) {
assert.Equal("event1", topic)
assert.Equal("error", err.Error()) assert.Equal("error", err.Error())
}) })