Index: src/object-observe.js |
diff --git a/src/object-observe.js b/src/object-observe.js |
index 499b27eca1bef61b76b367f591fbc66413cd09bd..7ccc619ad4b5b23dd2bda7a3098471d83c154fe6 100644 |
--- a/src/object-observe.js |
+++ b/src/object-observe.js |
@@ -63,6 +63,7 @@ if (IS_UNDEFINED(observationState.callbackInfoMap)) { |
observationState.notifierObjectInfoMap = %ObservationWeakMapCreate(); |
observationState.pendingObservers = null; |
observationState.nextCallbackPriority = 0; |
+ observationState.microtaskScheduled = false; |
} |
function ObservationWeakMap(map) { |
@@ -395,6 +396,7 @@ function ObserverEnqueueIfActive(observer, objectInfo, changeRecord, |
observationState.pendingObservers[callbackInfo.priority] = callback; |
callbackInfo.push(changeRecord); |
%SetMicrotaskPending(true); |
+ EnqueueObserveMicrotask(); |
} |
function ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, type) { |
@@ -575,6 +577,7 @@ function ObjectDeliverChangeRecords(callback) { |
} |
function ObserveMicrotaskRunner() { |
+ observationState.microtaskScheduled = false; |
var pendingObservers = observationState.pendingObservers; |
if (pendingObservers) { |
observationState.pendingObservers = null; |
@@ -583,7 +586,14 @@ function ObserveMicrotaskRunner() { |
} |
} |
} |
-RunMicrotasks.runners.push(ObserveMicrotaskRunner); |
+ |
+function EnqueueObserveMicrotask() { |
+ if (observationState.microtaskScheduled) |
+ return; |
+ |
+ RunMicrotasks.queue.push(ObserveMicrotaskRunner); |
+ observationState.microtaskScheduled = true; |
+} |
function SetupObjectObserve() { |
%CheckIsBootstrapping(); |