mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-17 03:02:28 +08:00
feat: add example for promise
This commit is contained in:
195
async/promise_example_test.go
Normal file
195
async/promise_example_test.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user