Skip to content

Commit aca70e0

Browse files
committed
ensure correct watcher invocation order for changes triggered inside user watchers (fix #2750)
1 parent 7c7c79b commit aca70e0

File tree

1 file changed

+12
-19
lines changed

1 file changed

+12
-19
lines changed

src/batcher.js

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
// triggered, the DOM would have already been in updated
1313
// state.
1414

15-
var queueIndex
1615
var queue = []
1716
var userQueue = []
1817
var has = {}
@@ -57,8 +56,8 @@ function flushBatcherQueue () {
5756
function runBatcherQueue (queue) {
5857
// do not cache length because more watchers might be pushed
5958
// as we run existing watchers
60-
for (queueIndex = 0; queueIndex < queue.length; queueIndex++) {
61-
var watcher = queue[queueIndex]
59+
for (let i = 0; i < queue.length; i++) {
60+
var watcher = queue[i]
6261
var id = watcher.id
6362
has[id] = null
6463
watcher.run()
@@ -91,22 +90,16 @@ function runBatcherQueue (queue) {
9190
export function pushWatcher (watcher) {
9291
var id = watcher.id
9392
if (has[id] == null) {
94-
if (internalQueueDepleted && !watcher.user) {
95-
// an internal watcher triggered by a user watcher...
96-
// let's run it immediately after current user watcher is done.
97-
userQueue.splice(queueIndex + 1, 0, watcher)
98-
} else {
99-
// push watcher into appropriate queue
100-
var q = watcher.user
101-
? userQueue
102-
: queue
103-
has[id] = q.length
104-
q.push(watcher)
105-
// queue the flush
106-
if (!waiting) {
107-
waiting = true
108-
nextTick(flushBatcherQueue)
109-
}
93+
// push watcher into appropriate queue
94+
var q = internalQueueDepleted || watcher.user
95+
? userQueue
96+
: queue
97+
has[id] = true
98+
q.push(watcher)
99+
// queue the flush
100+
if (!waiting) {
101+
waiting = true
102+
nextTick(flushBatcherQueue)
110103
}
111104
}
112105
}

0 commit comments

Comments
 (0)