Hi,

Your "idle" flag -- which you seem to use to mean "busy processing a
request", which I found *really* confusing at first :-) -- is getting
cleared inappropriately whenever you pull something from your queue. I
don't know that that's the problem, but it's probably wrong. The error
is in your onComplete function:

if (this.queue.size() > 0) {
    console.log("queue-size > 0, so enqueue next item");
    this.push("queued: " + this.queue.shift());
}
this.idle = false; // <=== Error if `if` above was true

If there's something in the queue, you call `push`, which sets the
flag, starts a new async request, and returns. But then you clear the
flag, so the next time `add` gets called, it'll think it should call
`push` rather than `queue.push` even though there's an outstanding
request.

If you just move the `this.idle = false;` line above the `if`
statement, it should sort out this issue. Whether it solves the
problems you described I can't say, but I suspect it'll solve at least
some of them.

HTH,
--
T.J. Crowder
Independent Software Consultant
tj / crowder software / com
www.crowdersoftware.com


On Aug 12, 7:55 pm, Moo <stuhlm...@fifty-nine.de> wrote:
> Hi there,
>
> I want to ensure, that messages are posted in the order, they come in
> the stack. My tests at jsFiddle were okay, but with a quick backend
> (where the requests are processed very fast) the order is crap.
> Sometimes items are posted twice. Is there anybody who can help me
> out? Thank you all!
>
> var MessageQueue = Class.create({
>         initialize: function(url) {
>         this.url = url;
>         this.queue = [];
>         this.idle = false;
>         },
>         add: function(message) {
>         if (this.idle) {
>                 console.log("idle, so saved to queue: " + message);
>                 this.queue.push(message);
>         } else {
>                 console.log("not idle, so pushed directly: " + message);
>                 this.push(message);
>         }
>         },
>         push: function(message) {
>         this.idle = true;
>         console.log("Ajax.Request will be called now!");
>         new Ajax.Request(this.url + "&message=" +
> encodeURIComponent(message), {
>                 onComplete: function() {
>                         console.log("successfully sent: " + message);
>                 if (this.queue.size() > 0) {
>                         console.log("queue-size > 0, so enqueue next item");
>                         this.push("queued: " + this.queue.shift());
>                 }
>                 this.idle = false;
>                 }.bind(this)
>         });
>         }
>
>
>
> });

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptacul...@googlegroups.com.
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to