package main
import (
"fmt"
"time"
)
type Promise struct {
result chan interface{}
error error
}
func NewPromise(task func() interface{}) *Promise {
p := &Promise{result: make(chan interface{}, 1)}
go func() {
result := task()
p.result <- result
}()
return p
}
func (p *Promise) Then(callback func(interface{}) interface{}) *Promise {
return NewPromise(func() interface{} {
result := <-p.result
if p.error != nil {
return p.error
}
return callback(result)
})
}
func (p *Promise) Catch(callback func(error) interface{}) *Promise {
return NewPromise(func() interface{} {
if p.error != nil {
return callback(p.error)
}
result := <-p.result
return result
})
}
func main() {
promise := NewPromise(func() interface{} {
return "Hello, World!"
})
promise.Then(func(result interface{}) interface{} {
message := result.(string)
fmt.Println(message)
return nil
}).Then(func(result interface{}) interface{} {
fmt.Println("Hello, Promise!")
return nil
}).Then(func(result interface{}) interface{} {
fmt.Println("Hello, Promise2!")
return nil
})
// 等待异步操作完成
time.Sleep(10 * time.Second)
}
网友评论