Gmail Calendar Documents Reader Web more »
Recently Visited Groups | Help | Sign in
Google Groups Home
Defered.setFinal
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  10 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Amit Mendapara  
View profile  
 More options Feb 10, 8:30 am
From: Amit Mendapara <mendapara.a...@gmail.com>
Date: Tue, 10 Feb 2009 19:00:36 +0530
Local: Tues, Feb 10 2009 8:30 am
Subject: Defered.setFinal

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

  Async.patch
< 1K Download

    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Per Cederberg  
View profile  
 More options Feb 10, 11:04 am
From: Per Cederberg <cederb...@gmail.com>
Date: Tue, 10 Feb 2009 17:04:56 +0100
Local: Tues, Feb 10 2009 11:04 am
Subject: Re: Defered.setFinal
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


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Bob Ippolito  
View profile  
 More options Feb 10, 11:48 am
From: Bob Ippolito <b...@redivi.com>
Date: Tue, 10 Feb 2009 08:48:44 -0800
Local: Tues, Feb 10 2009 11:48 am
Subject: Re: [mochikit] Re: Defered.setFinal
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.


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Amit Mendapara  
View profile  
 More options Feb 10, 12:58 pm
From: Amit Mendapara <mendapara.a...@gmail.com>
Date: Tue, 10 Feb 2009 23:28:20 +0530
Local: Tues, Feb 10 2009 12:58 pm
Subject: Re: [mochikit] Re: Defered.setFinal

Per,

Your hack won't work with my case as it would mark the deferred as
`chained` so consecutive addCallback/addErrback won't work. Considering
Bob's suggestion, I modified my patch to ensure no further
callback/errbacks can be registered.

Regards
--
Amit

  Async.patch
1K Download

    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Per Cederberg  
View profile  
 More options Feb 10, 2:52 pm
From: Per Cederberg <cederb...@gmail.com>
Date: Tue, 10 Feb 2009 20:52:30 +0100
Local: Tues, Feb 10 2009 2:52 pm
Subject: Re: [mochikit] Re: Defered.setFinal
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


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Amit Mendapara  
View profile  
 More options Feb 11, 12:58 am
From: Amit Mendapara <mendapara.a...@gmail.com>
Date: Tue, 10 Feb 2009 21:58:06 -0800 (PST)
Local: Wed, Feb 11 2009 12:58 am
Subject: Re: Defered.setFinal
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:


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Amit Mendapara  
View profile  
 More options Feb 11, 7:52 am
From: Amit Mendapara <mendapara.a...@gmail.com>
Date: Wed, 11 Feb 2009 04:52:21 -0800 (PST)
Local: Wed, Feb 11 2009 7:52 am
Subject: Re: Defered.setFinal
Even better...

if (this.chain.length == 0 && this._finalizer) {
    this._finalized = this._finalizer(res);

}

This will allow us to finalize the deferred based on some
conditions...

- Amit

On Feb 11, 12:52 am, Per Cederberg <cederb...@gmail.com> wrote:


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Per Cederberg  
View profile  
 More options Jul 20, 5:26 am
From: Per Cederberg <cederb...@gmail.com>
Date: Mon, 20 Jul 2009 11:26:12 +0200
Local: Mon, Jul 20 2009 5:26 am
Subject: Re: [mochikit] Re: Defered.setFinal
Slow response here, but I finally got around to committing this to
Subversion (r1533):

  http://trac.mochikit.com/changeset/1533

Modified the patch a bit further to account for some additional cases.
Also added tests and documentation.

@Bob: Can you please review this change? I have the feeling that I've
still missed one or two corner cases... Also, the mochikit.com and
trac.mochikit.com site seems slow from here... High server load
recently?

@Amit: Please check that my additional controls doesn't break you use case.

Cheers,

/Per


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Amit Mendapara  
View profile  
 More options Jul 20, 6:03 am
From: Amit Mendapara <mendapara.a...@gmail.com>
Date: Mon, 20 Jul 2009 03:03:55 -0700 (PDT)
Local: Mon, Jul 20 2009 6:03 am
Subject: Re: Defered.setFinal
Hi Per,

I have just tested the changes with the Ajax extension module and it
works as expected. Thanks for considering adding this feature. This
would help me creating jQuery compatible Ajax module for Mochikit
extensions project.

Currently, I'm quite busy with some another work but supposed to come
back on MochiKit Extensions soon...

Regards
--
Amit Mendapara

On Jul 20, 2:26 pm, Per Cederberg <cederb...@gmail.com> wrote:


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Giulio Cesare Solaroli  
View profile  
 More options Jul 25, 6:51 pm
From: Giulio Cesare Solaroli <giulio.ces...@gmail.com>
Date: Sun, 26 Jul 2009 00:51:59 +0200
Local: Sat, Jul 25 2009 6:51 pm
Subject: Re: [mochikit] Re: Defered.setFinal
Hello all,

On Tue, Feb 10, 2009 at 6: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 order to handle this case, we have overwrote the 'callback' method
in our subclass of the Deferred class, to add a default Errback that
at least logs the error.

A similar solution could be probably used also in MochiKit, allowing
the user to optionally specify a specific error handler / finalizer.
This will allow any further check, as once the Deferred is triggered
it is already impossible to add further callback/errback.

I will check anyway the fix added to the repository to see how to
improve our current extension with the committed fix.

Giulio Cesare


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2009 Google