Skip to content

Commit 6aaf8ef

Browse files
committed
fix(runtime-core): avoid double firing when mounting inside a watcher callback
fix #6614
1 parent 6493da5 commit 6aaf8ef

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

packages/runtime-core/__tests__/scheduler.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,4 +534,16 @@ describe('scheduler', () => {
534534
// should not be called
535535
expect(spy).toHaveBeenCalledTimes(0)
536536
})
537+
538+
it('flushPreFlushCbs inside a pre job', async () => {
539+
const spy = jest.fn()
540+
const job = () => {
541+
spy()
542+
flushPreFlushCbs()
543+
}
544+
job.pre = true
545+
queueJob(job)
546+
await nextTick()
547+
expect(spy).toHaveBeenCalledTimes(1)
548+
})
537549
})

packages/runtime-core/src/scheduler.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ export function queuePostFlushCb(cb: SchedulerJobs) {
133133
queueFlush()
134134
}
135135

136-
export function flushPreFlushCbs(seen?: CountMap, i = flushIndex) {
136+
export function flushPreFlushCbs(
137+
seen?: CountMap,
138+
// if currently flushing, skip the current job itself
139+
i = isFlushing ? flushIndex + 1 : 0
140+
) {
137141
if (__DEV__) {
138142
seen = seen || new Map()
139143
}

0 commit comments

Comments
 (0)