No need for event emitters, you can do this entirely functional. For this 
sorts of asynchroneous tasks, the "async" module comes to the rescue. 

A possible implementation would use the "queue" function with a high value 
for the concurrency of task procession. Whenever an error occurs, or you 
retrieve your desired data, dump that in one (or two seperate) arrays. When 
your queue is drained, your send both the errors and the results back.

In regard to limiting the amount of errors, if your error array is too 
long, you can just skip processing in the worker function. I,.e. a single 
line of if (errors.length > 5) return callback(); at the beginning of your 
worker function.

Here's the documentation: https://github.com/caolan/async#queue

Flow control, especially in the context of asynchroneous behaviour, is 
something which you need to wrap your head around when working with node. 
"async" is one of the most used packages that makes our lives easier for 
tasks like this one.

On Monday, February 25, 2013 10:57:52 AM UTC+1, Glenn Block wrote:
>
> Hello all
>
> Let's assume you have an API that results in a batch of HTTP calls which 
> fire async and which are not sequential. A constraint of the API is that 
> any errors that occur during the calls need to get returned to the user.
>
> How have you customarily designed this?
>
> One idea was something like the following
>
> function send(message, callback) {
> }
>
> where callback is function(error, results) {
> }
>
> In this case error if not null is a JSON object with a collection of child 
> objects with the errors.
>
> An alternative idea I had was to have an additional completion callback 
> per item.
>
> so:
>
> function send(message, completionCallback, itemCallback) {
> }
>
> This introduces a callback for each item that is processed. In this case 
> the completion callback has a single error if ANY errors occur while the   
> itemCallback has individual errors as they occur.
>
> This is useful for cases where you might want to stop further processing 
> if the number of errors is very high.
>
> Thoughts / Experiences?
> Glenn 
>
>
>
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to