私はJavascriptと同様のPromiseを実装しようとしています。Goでチャネルを使用してPromiseを実装する
- は右 すぐメインゴルーチンに
Promise
を返すゴルーチンを実行します。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. }
は、どのように私は次の操作を行います。何かが送信されると、ゴルーチンから復帰して読み取ることがその チャネルを利用できるよう
Promise.Result
またはPromise.Error
のいずれかに送信する 何を待っている間
非同期にメインルーチンに何かをします。