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.