Skip to content

Commit

Permalink
handle asyn error.
Browse files Browse the repository at this point in the history
  • Loading branch information
name5566 committed Jul 23, 2016
1 parent e51da2a commit 83adb73
Showing 1 changed file with 8 additions and 17 deletions.
25 changes: 8 additions & 17 deletions chanrpc/chanrpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -260,10 +260,11 @@ func (c *Client) CallN(id interface{}, args ...interface{}) ([]interface{}, erro
return assert(ri.ret), ri.err
}

func (c *Client) asynCall(id interface{}, args []interface{}, cb interface{}, n int) error {
func (c *Client) asynCall(id interface{}, args []interface{}, cb interface{}, n int) {
f, err := c.f(id, n)
if err != nil {
return err
c.chanAsynRet <- &RetInfo{err: err, cb: cb}
return
}

err = c.call(&CallInfo{
Expand All @@ -273,10 +274,9 @@ func (c *Client) asynCall(id interface{}, args []interface{}, cb interface{}, n
cb: cb,
}, false)
if err != nil {
return err
c.chanAsynRet <- &RetInfo{err: err, cb: cb}
return
}

return nil
}

func (c *Client) AsynCall(id interface{}, _args ...interface{}) {
Expand All @@ -294,20 +294,11 @@ func (c *Client) AsynCall(id interface{}, _args ...interface{}) {
cb := _args[len(_args)-1]
switch cb.(type) {
case func(error):
err := c.asynCall(id, args, cb, 0)
if err != nil {
cb.(func(error))(err)
}
c.asynCall(id, args, cb, 0)
case func(interface{}, error):
err := c.asynCall(id, args, cb, 1)
if err != nil {
cb.(func(interface{}, error))(nil, err)
}
c.asynCall(id, args, cb, 1)
case func([]interface{}, error):
err := c.asynCall(id, args, cb, 2)
if err != nil {
cb.(func([]interface{}, error))(nil, err)
}
c.asynCall(id, args, cb, 2)
default:
panic("definition of callback function is invalid")
}
Expand Down

0 comments on commit 83adb73

Please sign in to comment.