It's not just error handler, it should always be called at the end
once result is available and all callbacks/errback (including default
errback) are fired.

setFinalizer: function(cb) {
    this._finalizer = cb;
}

if (this.chain.length == 0 && this._finalizer) {
    this.finalized = true;
    this._finalizer(res);
}

--Amit

On Feb 11, 12:52 am, Per Cederberg <cederb...@gmail.com> wrote:
> You mean like this?
>
>     setFinalizer: function(cb) {
>         this._finalizer = cb;
>     }
>
>     ...
>
>     if (this.chain.length == 0 && this._finalizer) {
>         this.finalized = true;
>         if (res instanceof Error) {
>             this._finalizer(res);
>         }
>     }
>
> Would that be acceptable to Amit as well? In that case we would add a
> default error handler (called a "finalizer"), which would also be what
> I'm planning to use this for.
>
> Other opinions?
>
> /Per
>
> On Tue, Feb 10, 2009 at 5:48 PM, Bob Ippolito <b...@redivi.com> wrote:
> > Finalizing a Deferred should ensure that no further callback/errbacks
> > are registered and it should attach a default error handler (success
> > should be no-op). The most common problem I've seen with Deferreds is
> > that an error occurs but nobody attached an error handler that far
> > down the stack. In Python they work around this by having a finalizer
> > so that you see the error when the object gets GC'ed, but that's not
> > really possible in JS since you don't have finalizers or weak
> > references.
>
> > On Tue, Feb 10, 2009 at 8:04 AM, Per Cederberg <cederb...@gmail.com> wrote:
>
> >> I think this is a good idea. I needed something similar too, so I
> >> ended up writing an ugly hack that worked most of the time...
>
> >>    d.addBoth(function (res) {d.addBoth(finalFunc); return res; });
>
> >> It adds new callback once the first deferred result drops in,
> >> hopefully after all the other callbacks have been added...
>
> >> But a more formally correct solution would probably be a good idea.
>
> >> Cheers,
>
> >> /Per
>
> >> On Tue, Feb 10, 2009 at 2:30 PM, Amit Mendapara
> >> <mendapara.a...@gmail.com> wrote:
> >>> Hi Per,
>
> >>> I have just started again improving the MochiKit Extensions. While
> >>> creating tests for the Ajax module, I found one problem (not bug, but
> >>> specific to the feature I'm trying to implement). I registered a
> >>> callback which should be fired at the end of all registered callbacks.
>
> >>> I achieved by modifying Async.js with a new method `setFinal` (not
> >>> addFinal as there should be only one finalizer)  which gets fired when
> >>> `chain.length == 0`. It's simple. I would we happy if you add one such
> >>> function in MochiKit.Async.Defered...
>
> >>> Regards
> >>> --
> >>> Amit
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"MochiKit" group.
To post to this group, send email to mochikit@googlegroups.com
To unsubscribe from this group, send email to 
mochikit+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to