asyncio: demo comments

This commit is contained in:
Li Jie
2024-07-27 15:26:02 +08:00
parent b2a2b2f29d
commit df5f1afb74

View File

@@ -19,6 +19,7 @@ type Response struct {
} }
func (r *Response) Text() (resolve io.Promise[string]) { func (r *Response) Text() (resolve io.Promise[string]) {
// return r.Body, nil
resolve(r.Body, nil) resolve(r.Body, nil)
return return
} }
@@ -105,26 +106,31 @@ type User struct {
func GetUser(name string) (resolve io.Promise[User]) { func GetUser(name string) (resolve io.Promise[User]) {
resp, err := AsyncHttpGet("http://example.com/user/" + name).Await() resp, err := AsyncHttpGet("http://example.com/user/" + name).Await()
if err != nil { if err != nil {
// return User{}, err
resolve(User{}, err) resolve(User{}, err)
return return
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
// return User{}, fmt.Errorf("http status code: %d", resp.StatusCode)
resolve(User{}, fmt.Errorf("http status code: %d", resp.StatusCode)) resolve(User{}, fmt.Errorf("http status code: %d", resp.StatusCode))
return return
} }
body, err := resp.Text().Await() body, err := resp.Text().Await()
if err != nil { if err != nil {
// return User{}, err
resolve(User{}, err) resolve(User{}, err)
return return
} }
user := User{} user := User{}
if err := json.Unmarshal([]byte(body), &user); err != nil { if err := json.Unmarshal([]byte(body), &user); err != nil {
// return User{}, err
resolve(User{}, err) resolve(User{}, err)
return return
} }
// return user, nil
resolve(user, nil) resolve(user, nil)
return return
} }
@@ -190,26 +196,32 @@ func GetUserCompiled(name string) *io.PromiseImpl[User] {
func GetScore() (resolve io.Promise[float64]) { func GetScore() (resolve io.Promise[float64]) {
resp, err := AsyncHttpGet("http://example.com/score/").Await() resp, err := AsyncHttpGet("http://example.com/score/").Await()
if err != nil { if err != nil {
// return 0, err
resolve(0, err) resolve(0, err)
return return
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
// return 0, fmt.Errorf("http status code: %d", resp.StatusCode)
resolve(0, fmt.Errorf("http status code: %d", resp.StatusCode)) resolve(0, fmt.Errorf("http status code: %d", resp.StatusCode))
return return
} }
body, err := resp.Text().Await() body, err := resp.Text().Await()
if err != nil { if err != nil {
// return 0, err
resolve(0, err) resolve(0, err)
return return
} }
score := 0.0 score := 0.0
if _, err := fmt.Sscanf(body, "%f", &score); err != nil { if _, err := fmt.Sscanf(body, "%f", &score); err != nil {
// return 0, err
resolve(0, err) resolve(0, err)
return return
} }
// return score, nil
resolve(score, nil) resolve(score, nil)
return return
} }
@@ -273,15 +285,18 @@ func GetScoreCompiled() *io.PromiseImpl[float64] {
func DoUpdate(op string) (resolve io.Promise[io.Void]) { func DoUpdate(op string) (resolve io.Promise[io.Void]) {
resp, err := AsyncHttpPost("http://example.com/update/" + op).Await() resp, err := AsyncHttpPost("http://example.com/update/" + op).Await()
if err != nil { if err != nil {
// return err
resolve(io.Void{}, err) resolve(io.Void{}, err)
return return
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
// return fmt.Errorf("http status code: %d", resp.StatusCode)
resolve(io.Void{}, fmt.Errorf("http status code: %d", resp.StatusCode)) resolve(io.Void{}, fmt.Errorf("http status code: %d", resp.StatusCode))
return return
} }
// return nil
resolve(io.Void{}, nil) resolve(io.Void{}, nil)
return return
} }
@@ -446,6 +461,7 @@ func Demo() (resolve io.Promise[io.Void]) {
} }
// for loop with async generator // for loop with async generator
// for u, err := range GenUsers() {...}
g1 := GenUsers() g1 := GenUsers()
for { for {
g.Call() g.Call()