Chromium Code Reviews| Index: src/promise.js |
| diff --git a/src/promise.js b/src/promise.js |
| index db7863f8098f686cab2fc4545eab1429165797fc..12882fcb089158ffd90e3425ecf3119edc6abf31 100644 |
| --- a/src/promise.js |
| +++ b/src/promise.js |
| @@ -173,37 +173,29 @@ function PromiseCatch(onReject) { |
| } |
| function PromiseEnqueue(value, tasks) { |
| - promiseEvents.push(value, tasks); |
| + RunMicrotasks.queue.push(function() { |
| + for (var i = 0; i < tasks.length; i += 2) { |
| + HandlePromise(value, tasks[i], tasks[i + 1]) |
| + } |
| + }); |
| + |
| %SetMicrotaskPending(true); |
| } |
| -function PromiseMicrotaskRunner() { |
| - var events = promiseEvents; |
| - if (events.length > 0) { |
| - promiseEvents = new InternalArray; |
| - for (var i = 0; i < events.length; i += 2) { |
| - var value = events[i]; |
| - var tasks = events[i + 1]; |
| - for (var j = 0; j < tasks.length; j += 2) { |
| - var handler = tasks[j]; |
| - var deferred = tasks[j + 1]; |
| - try { |
| - var result = handler(value); |
| - if (result === deferred.promise) |
| - throw MakeTypeError('promise_cyclic', [result]); |
| - else if (IsPromise(result)) |
| - result.chain(deferred.resolve, deferred.reject); |
| - else |
| - deferred.resolve(result); |
| - } catch(e) { |
| - // TODO(rossberg): perhaps log uncaught exceptions below. |
| - try { deferred.reject(e) } catch(e) {} |
| - } |
| - } |
| - } |
| +function HandlePromise(value, handler, deferred) { |
|
rossberg
2014/02/04 13:50:08
Nit: call this PromiseHandle for consistency
rafaelw
2014/02/04 19:57:15
Done.
|
| + try { |
| + var result = handler(value); |
| + if (result === deferred.promise) |
| + throw MakeTypeError('promise_cyclic', [result]); |
| + else if (IsPromise(result)) |
| + result.chain(deferred.resolve, deferred.reject); |
| + else |
| + deferred.resolve(result); |
| + } catch(e) { |
| + // TODO(rossberg): perhaps log uncaught exceptions below. |
| + try { deferred.reject(e) } catch(e) {} |
| } |
| } |
| -RunMicrotasks.runners.push(PromiseMicrotaskRunner); |
| // Multi-unwrapped chaining with thenable coercion. |