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 <[email protected]> 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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/prototype-scriptaculous?hl=en.