func()

in go/showcase/pkg/showcase/part5/asyncops.go [59:89]


func (a AsyncOpsFn) Invoke(ctx statefun.Context, message statefun.Message) error {
	username := ctx.Self().Id

	ageChannel := getAgeFromRemoteDb(ctx, username)
	friendsChannel := getFriendsListFromAnotherRemoteDatabase(ctx, username)

	var age int32
	var friends []string

	finished := false

	for !finished {
		select {
		case <-ctx.Done():
			return ctx.Err()
		case age = <-ageChannel:
			if friends != nil {
				finished = true
			}
		case friends = <-friendsChannel:
			if age != 0 {
				finished = true
			}
		}
	}

	ctx.Storage().Set(a.UserAge, age)
	ctx.Storage().Set(a.FriendsList, friends)

	return nil
}