Ich versuche, Promise in Go zu implementieren, die der in Javascript ähneln würde.Implementieren von Versprechen mit Kanälen 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.
}
Wie mache ich folgendes:
- Führen Sie einen goroutine, die
Promise
zum Haupt goroutine rechts weg zurück. Asynchron etwas auf der Hauptroutine tun, während für etwas warten, bis entweder
Promise.Result
oderPromise.Error
Sobald etwas gesendet wird, kehrt aus dem goroutine und machen, dass Kanal lesen verfügbar werden gesendet werden soll.