Skip to content

Commit efa655a

Browse files
committed
Make the AskOnce return error.
1 parent c74e5fb commit efa655a

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

actor.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package fpgo
22

33
import (
4+
"fmt"
45
"time"
56
)
67

8+
var (
9+
ErrActorAskTimeout = fmt.Errorf("ErrActorAskTimeout")
10+
)
11+
712
// ActorHandle A target could send messages
813
type ActorHandle interface {
914
Send(message interface{})
@@ -144,20 +149,22 @@ func AskNewByOptionsGenerics(message interface{}, ioCh *chan interface{}) *AskDe
144149
}
145150

146151
// AskOnce Sender Ask
147-
func (askSelf *AskDef) AskOnce(target ActorHandle, timeout *time.Duration) interface{} {
152+
func (askSelf *AskDef) AskOnce(target ActorHandle, timeout *time.Duration) (interface{}, error) {
148153
ch := askSelf.AskChannel(target)
154+
defer close(*ch)
149155
var result interface{}
156+
// var err error
150157
if timeout == nil {
151158
result = <-*ch
152159
} else {
153160
select {
154161
case result = <-*ch:
155162
case <-time.After(*timeout):
163+
return result, ErrActorAskTimeout
156164
}
157165
}
158-
close(*ch)
159166

160-
return result
167+
return result, nil
161168
}
162169

163170
// AskChannel Sender Ask

actor_test.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ func TestActorCommon(t *testing.T) {
8787
func TestActorAsk(t *testing.T) {
8888
var expectedInt int
8989
var actual int
90+
var err error
91+
var result interface{}
9092

9193
// Testee
9294
actorRoot := Actor.New(func(self *ActorDef, input interface{}) {
@@ -112,12 +114,14 @@ func TestActorAsk(t *testing.T) {
112114
// Normal cases
113115
actual = 0
114116
expectedInt = 10
115-
actual, _ = Maybe.Just(AskNewGenerics(1).AskOnce(actorRoot, nil)).ToInt()
117+
result, _ = Ask.New(1).AskOnce(actorRoot, nil)
118+
actual, _ = Maybe.Just(result).ToInt()
116119
assert.Equal(t, expectedInt, actual)
117120
// Ask with Timeout
118121
actual = 0
119122
expectedInt = 20
120-
actual, _ = Maybe.Just(AskNewGenerics(2).AskOnce(actorRoot, &timeout)).ToInt()
123+
result, _ = Ask.New(2).AskOnce(actorRoot, &timeout)
124+
actual, _ = Maybe.Just(result).ToInt()
121125
assert.Equal(t, expectedInt, actual)
122126
// Ask channel
123127
actual = 0
@@ -130,6 +134,8 @@ func TestActorAsk(t *testing.T) {
130134
// Timeout cases
131135
actual = 9999
132136
expectedInt = 0
133-
actual, _ = Maybe.Just(AskNewGenerics(-1).AskOnce(actorRoot, &timeout)).ToInt()
137+
result, err = Ask.New(-1).AskOnce(actorRoot, &timeout)
138+
actual, _ = Maybe.Just(result).ToInt()
134139
assert.Equal(t, expectedInt, actual)
140+
assert.Equal(t, ErrActorAskTimeout, err)
135141
}

0 commit comments

Comments
 (0)