| Index: src/promise.js
|
| diff --git a/src/promise.js b/src/promise.js
|
| index 37c10ec08eb298d5543738531168fe0315ca7854..ca9bc25f279ee45c48ce00f39af736de1b4d15c5 100644
|
| --- a/src/promise.js
|
| +++ b/src/promise.js
|
| @@ -30,7 +30,7 @@ var promiseValue = GLOBAL_PRIVATE("Promise#value");
|
| var promiseOnResolve = GLOBAL_PRIVATE("Promise#onResolve");
|
| var promiseOnReject = GLOBAL_PRIVATE("Promise#onReject");
|
| var promiseRaw = GLOBAL_PRIVATE("Promise#raw");
|
| -var promiseDebug = GLOBAL_PRIVATE("Promise#debug");
|
| +var promiseHasReject = GLOBAL_PRIVATE("Promise#hasReject");
|
| var lastMicrotaskId = 0;
|
|
|
| (function() {
|
| @@ -159,11 +159,8 @@ var lastMicrotaskId = 0;
|
|
|
| PromiseReject = function PromiseReject(promise, r) {
|
| // Check promise status to confirm that this reject has an effect.
|
| - // Check promiseDebug property to avoid duplicate event.
|
| - if (DEBUG_IS_ACTIVE &&
|
| - GET_PRIVATE(promise, promiseStatus) == 0 &&
|
| - !HAS_DEFINED_PRIVATE(promise, promiseDebug)) {
|
| - %DebugPromiseRejectEvent(promise, r);
|
| + if (GET_PRIVATE(promise, promiseStatus) == 0) {
|
| + %PromiseRejectEvent(promise, r);
|
| }
|
| PromiseDone(promise, -1, r, promiseOnReject)
|
| }
|
| @@ -213,6 +210,10 @@ var lastMicrotaskId = 0;
|
| // flatMap
|
| onResolve = IS_UNDEFINED(onResolve) ? PromiseIdResolveHandler : onResolve;
|
| onReject = IS_UNDEFINED(onReject) ? PromiseIdRejectHandler : onReject;
|
| + if (onReject != PromiseIdRejectHandler) {
|
| + // Mark this promise as having reject handler.
|
| + SET_PRIVATE(this, promiseHasReject, true);
|
| + }
|
| var deferred = %_CallFunction(this.constructor, PromiseDeferred);
|
| switch (GET_PRIVATE(this, promiseStatus)) {
|
| case UNDEFINED:
|
| @@ -326,20 +327,18 @@ var lastMicrotaskId = 0;
|
| // Utility for debugger
|
|
|
| function PromiseHasRejectHandlerRecursive(promise) {
|
| + if (GET_PRIVATE(promise, promiseHasReject)) return true;
|
| var queue = GET_PRIVATE(promise, promiseOnReject);
|
| if (IS_UNDEFINED(queue)) return false;
|
| - // Do a depth first search for a reject handler that's not
|
| - // the default PromiseIdRejectHandler.
|
| + // Do a depth first search for a promise that has been marked as having
|
| + // a reject handler.
|
| for (var i = 0; i < queue.length; i += 2) {
|
| - if (queue[i] != PromiseIdRejectHandler) return true;
|
| if (PromiseHasRejectHandlerRecursive(queue[i + 1].promise)) return true;
|
| }
|
| return false;
|
| }
|
|
|
| PromiseHasRejectHandler = function PromiseHasRejectHandler() {
|
| - // Mark promise as already having triggered a reject event.
|
| - SET_PRIVATE(this, promiseDebug, true);
|
| return PromiseHasRejectHandlerRecursive(this);
|
| };
|
|
|
|
|