From 4ae7e5982922a36b87c4913f703c0cea2e8340fd Mon Sep 17 00:00:00 2001 From: dudaodong Date: Fri, 17 Mar 2023 16:03:35 +0800 Subject: [PATCH] feat: add example for promise --- async/promise_example_test.go | 195 ++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 async/promise_example_test.go diff --git a/async/promise_example_test.go b/async/promise_example_test.go new file mode 100644 index 0000000..6b06df3 --- /dev/null +++ b/async/promise_example_test.go @@ -0,0 +1,195 @@ +package async + +import ( + "errors" + "fmt" + "time" + + "github.com/duke-git/lancet/v2/internal" +) + +func ExampleNew() { + p := New(func(resolve func(string), reject func(error)) { + resolve("hello") + }) + + val, err := p.Await() + if err != nil { + return + } + + fmt.Println(val) + + // Output: + // hello +} + +func ExampleThen() { + p1 := New(func(resolve func(string), reject func(error)) { + resolve("hello ") + }) + + p2 := Then(p1, func(s string) string { + return s + "world" + }) + + result, err := p2.Await() + if err != nil { + return + } + + fmt.Println(result) + + // Output: + // hello world +} + +func ExamplePromise_Then() { + p1 := New(func(resolve func(string), reject func(error)) { + resolve("hello ") + }) + + p2 := p1.Then(func(s string) string { + return s + "world" + }) + + result, err := p2.Await() + if err != nil { + return + } + + fmt.Println(result) + + // Output: + // hello world +} + +func ExampleCatch() { + p1 := New(func(resolve func(string), reject func(error)) { + err := errors.New("error1") + reject(err) + }) + + p2 := Catch(p1, func(err error) error { + e := errors.New("error2") + return internal.JoinError(err, e) + }) + + _, err := p1.Await() + + fmt.Println(err.Error()) + + result2, err := p2.Await() + + fmt.Println(result2) + fmt.Println(err.Error()) + + // Output: + // error1 + // + // error1 + // error2 +} + +func ExamplePromise_Catch() { + p1 := New(func(resolve func(string), reject func(error)) { + err := errors.New("error1") + reject(err) + }) + + p2 := p1.Catch(func(err error) error { + e := errors.New("error2") + return internal.JoinError(err, e) + }) + + _, err := p1.Await() + + fmt.Println(err.Error()) + + result2, err := p2.Await() + + fmt.Println(result2) + fmt.Println(err.Error()) + + // Output: + // error1 + // + // error1 + // error2 +} + +func ExampleAll() { + p1 := New(func(resolve func(string), reject func(error)) { + resolve("a") + }) + p2 := New(func(resolve func(string), reject func(error)) { + resolve("b") + }) + p3 := New(func(resolve func(string), reject func(error)) { + resolve("c") + }) + + pms := []*Promise[string]{p1, p2, p3} + p := All(pms) + + result, err := p.Await() + if err != nil { + return + } + + fmt.Println(result) + + // Output: + // [a b c] +} + +func ExampleAny() { + p1 := New(func(resolve func(string), reject func(error)) { + time.Sleep(time.Millisecond * 250) + resolve("fast") + }) + p2 := New(func(resolve func(string), reject func(error)) { + time.Sleep(time.Millisecond * 500) + resolve("slow") + }) + p3 := New(func(resolve func(string), reject func(error)) { + reject(errors.New("error")) + }) + + pms := []*Promise[string]{p1, p2, p3} + p := Any(pms) + + result, err := p.Await() + if err != nil { + return + } + + fmt.Println(result) + + // Output: + // fast +} + +func ExampleRace() { + p1 := New(func(resolve func(string), reject func(error)) { + time.Sleep(time.Millisecond * 100) + resolve("fast") + }) + p2 := New(func(resolve func(string), reject func(error)) { + time.Sleep(time.Millisecond * 300) + resolve("slow") + }) + + pms := []*Promise[string]{p1, p2} + p := Race(pms) + + result, err := p.Await() + if err != nil { + return + } + + fmt.Println(result) + + // Output: + // fast +}