queue.splice(findInsertionIndex(jobId), 0, job)
}
- if (!(job.flags! & SchedulerJobFlags.ALLOW_RECURSE)) {
- job.flags! |= SchedulerJobFlags.QUEUED
- }
+ job.flags! |= SchedulerJobFlags.QUEUED
+
queueFlush()
}
}
activePostFlushCbs.splice(postFlushIndex + 1, 0, cb)
} else if (!(cb.flags! & SchedulerJobFlags.QUEUED)) {
pendingPostFlushCbs.push(cb)
- if (!(cb.flags! & SchedulerJobFlags.ALLOW_RECURSE)) {
- cb.flags! |= SchedulerJobFlags.QUEUED
- }
+ cb.flags! |= SchedulerJobFlags.QUEUED
}
} else {
// if cb is an array, it is a component lifecycle hook which can only be
}
queue.splice(i, 1)
i--
+ if (cb.flags! & SchedulerJobFlags.ALLOW_RECURSE) {
+ cb.flags! &= ~SchedulerJobFlags.QUEUED
+ }
cb()
cb.flags! &= ~SchedulerJobFlags.QUEUED
}
if (__DEV__ && checkRecursiveUpdates(seen!, cb)) {
continue
}
+ if (cb.flags! & SchedulerJobFlags.ALLOW_RECURSE) {
+ cb.flags! &= ~SchedulerJobFlags.QUEUED
+ }
if (!(cb.flags! & SchedulerJobFlags.DISPOSED)) cb()
cb.flags! &= ~SchedulerJobFlags.QUEUED
}
if (__DEV__ && check(job)) {
continue
}
+ if (job.flags! & SchedulerJobFlags.ALLOW_RECURSE) {
+ job.flags! &= ~SchedulerJobFlags.QUEUED
+ }
callWithErrorHandling(
job,
job.i,
}
}
} finally {
+ // If there was an error we still need to clear the QUEUED flags
+ for (; flushIndex < queue.length; flushIndex++) {
+ const job = queue[flushIndex]
+ if (job) {
+ job.flags! &= ~SchedulerJobFlags.QUEUED
+ }
+ }
+
flushIndex = 0
queue.length = 0