我試圖在Go中實現Promise,它與Javascript中的類似。在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.
}
如何做到以下幾點:
- 運行的goroutine,它會返回
Promise
到主夠程權 了。 異步做主程序的東西,而等待 什麼將其發送到
Promise.Result
或Promise.Error
一旦事情被髮送,從夠程返回並做出可 通道被讀取。