Commit 457ecba7 authored by Romain Courteaud's avatar Romain Courteaud

Revert "WIP Update RSVP version"

This reverts commit 2c5a4d1c.
parent 0c0c426d
...@@ -602,7 +602,7 @@ define("rsvp/promise", ...@@ -602,7 +602,7 @@ define("rsvp/promise",
then: function(done, fail) { then: function(done, fail) {
this.off('error', onerror); this.off('error', onerror);
var thenPromise = new Promise(function() {}, var thenPromise = new this.constructor(function() {},
function () { function () {
thenPromise.trigger('promise:cancelled', {}); thenPromise.trigger('promise:cancelled', {});
}); });
...@@ -736,76 +736,97 @@ define("rsvp/queue", ...@@ -736,76 +736,97 @@ define("rsvp/queue",
ResolvedQueueError.prototype.constructor = ResolvedQueueError; ResolvedQueueError.prototype.constructor = ResolvedQueueError;
var Queue = function() { var Queue = function() {
var queue = this,
promise_list = [],
promise,
fulfill,
reject,
resolved;
if (!(this instanceof Queue)) { if (!(this instanceof Queue)) {
return new Queue(); return new Queue();
} }
var promise_stack = [], function canceller() {
// handleQueue for (var i = 0; i < 2; i++) {
detect_end_index = 1; promise_list[i].cancel();
Promise.call(this, function (resolveQueue, rejectQueue) {
var detectQueueSuccess,
detectQueueError;
function handleQueue() {
if (promise_stack.length === detect_end_index) {
return true;
} }
promise_stack.splice(0, detect_end_index);
promise_stack.push(
promise_stack[promise_stack.length - 1].then(detectQueueSuccess,
detectQueueError)
);
detect_end_index = promise_stack.length;
return false;
} }
detectQueueSuccess = function (fulfillmentValue) { promise = new Promise(function(done, fail) {
if (handleQueue()) { fulfill = function (fulfillmentValue) {
return resolveQueue(fulfillmentValue); if (resolved) {return;}
} queue.isFulfilled = true;
return fulfillmentValue; queue.fulfillmentValue = fulfillmentValue;
resolved = true;
return done(fulfillmentValue);
};
reject = function (rejectedReason) {
if (resolved) {return;}
queue.isRejected = true;
queue.rejectedReason = rejectedReason ;
resolved = true;
return fail(rejectedReason);
}; };
}, canceller);
detectQueueError = function (rejectedReason) { promise_list.push(resolve());
if (handleQueue()) { promise_list.push(promise_list[0].then(function () {
return rejectQueue(rejectedReason); promise_list.splice(0, 2);
if (promise_list.length === 0) {
fulfill();
} }
throw rejectedReason; }));
queue.cancel = function () {
if (resolved) {return;}
resolved = true;
promise.cancel();
promise.fail(function (rejectedReason) {
queue.isRejected = true;
queue.rejectedReason = rejectedReason;
});
};
queue.then = function () {
return promise.then.apply(promise, arguments);
}; };
// Resolve by default queue.push = function(done, fail) {
promise_stack.push( var last_promise = promise_list[promise_list.length - 1],
resolve().then(detectQueueSuccess) next_promise;
);
}, function () { if (resolved) {
// Cancel all created promises throw new ResolvedQueueError();
var i;
for (i = 0; i < promise_stack.length; i += 1) {
promise_stack[i].cancel();
} }
}); next_promise = last_promise.then(done, fail);
promise_list.push(next_promise);
this.push = function (done, fail) { // Handle pop
if (this.isFulfilled || this.isRejected) { promise_list.push(next_promise.then(function (fulfillmentValue) {
throw new ResolvedQueueError(); promise_list.splice(0, 2);
if (promise_list.length === 0) {
fulfill(fulfillmentValue);
} else {
return fulfillmentValue;
} }
promise_stack.push( }, function (rejectedReason) {
promise_stack[promise_stack.length - 1].then(done, fail) promise_list.splice(0, 2);
); if (promise_list.length === 0) {
return this; reject(rejectedReason);
}; } else {
throw rejectedReason;
}
}));
return this; return this;
}; };
};
Queue.prototype = Object.create(Promise.prototype); Queue.prototype = Object.create(Promise.prototype);
Queue.prototype.constructor = Queue; Queue.prototype.constructor = Queue;
__exports__.Queue = Queue; __exports__.Queue = Queue;
__exports__.ResolvedQueueError = ResolvedQueueError; __exports__.ResolvedQueueError = ResolvedQueueError;
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment