go语言类似Promise操作

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)
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容