mirror of
https://github.com/duke-git/lancet.git
synced 2025-09-26 19:41:20 +08:00
196 lines
3.0 KiB
Go
196 lines
3.0 KiB
Go
package promise
|
|
|
|
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
|
|
}
|