Próbuję wdrożyć Promise in Go, która byłaby podobna do tej w JavaScript.Realizacja obietnicy z kanałami w Go
type Promise struct {
Result chan string
Error chan error
}
func NewPromise() (*Promise) {
r := make(chan string, 1)
e := make(chan error, 1)
return &Promise{
Result: r,
Error: e,
}
}
func main() {
var p = NewPromise()
go func(p *Promise) {
time.Sleep(time.Duration(5)*time.Second)
p.Result <- "done"
}(p)
if <- p.Result {
fmt.Println(<-p.Result)
}
// Is it possible to do something else here while wait for 5s?
// Once Promise is fulfilled after 5s, the Result is available.
}
Jak mogę wykonać następujące czynności:
- Uruchom goroutine, które zwracają
Promise
do głównego goroutine prawo dalej. asynchronicznie zrobić coś na głównej procedury podczas czekać na cokolwiek mają być wysłane do obu
Promise.Result
lubPromise.Error
Gdy coś jest wysyłane, powrócić z goroutine i sprawiają, że kanał dostępny do odczytu.