Re: Error Handling for Callback API to Blocking API example in Joy of Clojure

2010-12-21 Thread Chouser
On Sun, Dec 19, 2010 at 3:36 AM, HiHeelHottie hiheelhot...@gmail.com wrote:

 In Joy of Clojure, there is a callback API to blocking API example in
 the section on promises.  Chouser outlines it a briefly in a
 discussion on Promise/Deliver use cases here -
 http://groups.google.com/group/clojure/browse_thread/thread/b1548aa40ba8072/210ec81bfe26032e?lnk=gstq=promise#210ec81bfe26032e:

 I've used them to convert a callback-based (continuation-passing
 style, if you will) API into a blocking one.  The lib I was using
 provides something you can call like:
        (rpc-call destination method-args done)
 Where 'done' is a function that gets called with the results of
 the remote procedure call.  But I want to write a function that
 does rpc but *returns* the result, so...
        (let [p (promise)]
          (rpc-call destination method-args #(deliver p %))
         �...@p)
 This will work just fine whether rpc-call calls 'done'
 synchronously, or if it returns right away and 'done' is called
 by some other thread later.
 --Chouser

 This is very neat.  Is this robust as is or would you need to add code
 to handle error cases such as an unavailable rpc server, rpc server
 never returning, an error trying to make the rpc call, etc.

It depends entirely on how rpc-call handles error cases.  If it
promises to always call its call back with something, even on
error cases (perhaps passing in an Error object or something),
then this would sufficient as-is.

However, anything that would cause the call back to be skipped
will of course cause the deliver to also be skipped, and the
deref on the promise will block forever.  The easiest way for
this to happen accidentally is if an exception is thrown, so
catching those and turning them into calls to the callback with
an error object is certainly a good idea.

--Chouser
http://joyofclojure.com/

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Error Handling for Callback API to Blocking API example in Joy of Clojure

2010-12-19 Thread HiHeelHottie

In Joy of Clojure, there is a callback API to blocking API example in
the section on promises.  Chouser outlines it a briefly in a
discussion on Promise/Deliver use cases here -
http://groups.google.com/group/clojure/browse_thread/thread/b1548aa40ba8072/210ec81bfe26032e?lnk=gstq=promise#210ec81bfe26032e:

I've used them to convert a callback-based (continuation-passing
style, if you will) API into a blocking one.  The lib I was using
provides something you can call like:
(rpc-call destination method-args done)
Where 'done' is a function that gets called with the results of
the remote procedure call.  But I want to write a function that
does rpc but *returns* the result, so...
(let [p (promise)]
  (rpc-call destination method-args #(deliver p %))
  @p)
This will work just fine whether rpc-call calls 'done'
synchronously, or if it returns right away and 'done' is called
by some other thread later.
--Chouser

This is very neat.  Is this robust as is or would you need to add code
to handle error cases such as an unavailable rpc server, rpc server
never returning, an error trying to make the rpc call, etc.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en