samber / mo

🦄 Monads and popular FP abstractions, powered by Go 1.18+ Generics (Option, Result, Either...)
https://pkg.go.dev/github.com/samber/mo
MIT License
2.47k stars 80 forks source link

Misuse of resolve/reject causes "close of closed channel" panic #17

Open yoavsv opened 1 year ago

yoavsv commented 1 year ago

Hello,

If I run:

mo.NewFuture(func(resolve func(struct{}), reject func(error)) {
    resolve(struct{}{})
    reject(errors.New("oh no..."))
})

I get panic: close of closed channel.

This makes me write defensive code (e.g. return after each call to reject / resolve). I would suggest to recover from panics and reflect it as an error as part of Result[T]'s error.