What about this:
function runHandlers(){
var h;
try {
while ( (h = handlers.shift()) ) {
h();
}
} catch (e) {
setTimeout(runHandlers);
throw e;
}
}
var handlers = [
function(){
throw "A";
},
function(){
throw "B";
}
];
This one will throw both (all) errors.
Am I missing something?
On Mar 24, 10:13 pm, John Resig <[email protected]> wrote:
> > I don't think it is the resposibility of the dispatcher to handle
> > exceptions.
> > I think it it is the resposibility of the dispatcher to dispatch
> > events. :-)
> > An error in one handler should not prevent another handler from
> > executing.
> > Nor should a dispatcher suppress errors so that it can complete its
> > task.
>
> Why not just use try/finally, then?
> Online here, as well:http://ejohn.org/files/handler.html
>
> <script>
> function runHandlers(i){
> i = i || 0;
> try {
> while ( i < handlers.length ) {
> handlers[i]();
> i++;
> }
> } finally {
> if ( i < handlers.length ) {
> runHandlers( i + 1 );
> }
> }
>
> }
>
> var handlers = [
> function(){
> document.write("testA<br>");
> throw "A";
> },
> function(){
> document.write("testB<br>");
> }
> ];
>
> try {
> runHandlers();} catch(e){
>
> document.write("ERROR: " + e + "<br>");}
>
> </script>
>
> Output:
> testA
> testB
> ERROR: A
>
> I don't think the order of the error is terribly important in this
> case. At the very least, though, you get the best of all worlds: All
> handlers execute, exceptions are thrown, and performance isn't
> sacrificed.
>
> --John
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"jQuery Development" 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/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---