Sto cercando di implementare Promise in Go che sarebbe simile a quello di Javascript.Implementazione di promessa con i canali in 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.
}
Come faccio a effettuare le seguenti operazioni:
- eseguire un goroutine, che restituiscono
Promise
al goroutine principale destra distanza. in modo asincrono fare qualcosa sulla routine principale mentre attendere nulla da inviare a uno o
Promise.Result
Promise.Error
Una volta che qualcosa viene inviato, torna dalle goroutine e fare che canali disponibili per essere letto.