| Index: src/js/promise.js
|
| diff --git a/src/js/promise.js b/src/js/promise.js
|
| index a7ba69e491968211d5d61cc4ba96300f0a48f09e..7d192371caeb08499fd201f6cba9cc3262c82fa8 100644
|
| --- a/src/js/promise.js
|
| +++ b/src/js/promise.js
|
| @@ -284,34 +284,34 @@ function ResolvePromise(promise, resolution) {
|
| }
|
|
|
| if (IS_CALLABLE(then)) {
|
| - // PromiseResolveThenableJob
|
| - var id;
|
| - var name = "PromiseResolveThenableJob";
|
| + var callbacks = CreateResolvingFunctions(promise, false);
|
| + var id, before_debug_event, after_debug_event;
|
| var instrumenting = DEBUG_IS_ACTIVE;
|
| - if (instrumenting && IsPromise(resolution)) {
|
| - // Mark the dependency of the new promise on the resolution
|
| - SET_PRIVATE(resolution, promiseHandledBySymbol, promise);
|
| - }
|
| - %EnqueueMicrotask(function() {
|
| - if (instrumenting) {
|
| - %DebugAsyncTaskEvent({ type: "willHandle", id: id, name: name });
|
| - }
|
| - // These resolving functions simply forward the exception, so
|
| - // don't create a new debugEvent.
|
| - var callbacks = CreateResolvingFunctions(promise, false);
|
| - try {
|
| - %_Call(then, resolution, callbacks.resolve, callbacks.reject);
|
| - } catch (e) {
|
| - %_Call(callbacks.reject, UNDEFINED, e);
|
| - }
|
| - if (instrumenting) {
|
| - %DebugAsyncTaskEvent({ type: "didHandle", id: id, name: name });
|
| - }
|
| - });
|
| if (instrumenting) {
|
| + if (IsPromise(resolution)) {
|
| + // Mark the dependency of the new promise on the resolution
|
| + SET_PRIVATE(resolution, promiseHandledBySymbol, promise);
|
| + }
|
| id = ++lastMicrotaskId;
|
| - %DebugAsyncTaskEvent({ type: "enqueue", id: id, name: name });
|
| + before_debug_event = {
|
| + type: "willHandle",
|
| + id: id,
|
| + name: "PromiseResolveThenableJob"
|
| + };
|
| + after_debug_event = {
|
| + type: "didHandle",
|
| + id: id,
|
| + name: "PromiseResolveThenableJob"
|
| + };
|
| + %DebugAsyncTaskEvent({
|
| + type: "enqueue",
|
| + id: id,
|
| + name: "PromiseResolveThenableJob"
|
| + });
|
| }
|
| + %EnqueuePromiseResolveThenableJob(
|
| + resolution, then, callbacks.resolve, callbacks.reject,
|
| + before_debug_event, after_debug_event);
|
| return;
|
| }
|
| }
|
| @@ -655,7 +655,7 @@ utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [
|
| "promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler,
|
| "promise_reject", DoRejectPromise,
|
| "promise_resolve", ResolvePromise,
|
| - "promise_then", PromiseThen,
|
| + "promise_then", PromiseThen
|
| ]);
|
|
|
| // This allows extras to create promises quickly without building extra
|
|
|