Skip to content

Commit ed34113

Browse files
maoberlehneryyx990803
authored andcommitted
fix: handle async component when parent is toggled before resolve (#9572)
fix #9571
1 parent 241eea1 commit ed34113

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/core/vdom/helpers/resolve-async-component.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import {
88
isTrue,
99
isObject,
1010
hasSymbol,
11-
isPromise
11+
isPromise,
12+
remove
1213
} from 'core/util/index'
1314

1415
import { createEmptyVNode } from 'core/vdom/vnode'
@@ -51,17 +52,21 @@ export function resolveAsyncComponent (
5152
return factory.resolved
5253
}
5354

55+
const owner = currentRenderingInstance
56+
if (isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
57+
// already pending
58+
factory.owners.push(owner)
59+
}
60+
5461
if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
5562
return factory.loadingComp
5663
}
5764

58-
const owner = currentRenderingInstance
59-
if (isDef(factory.owners)) {
60-
// already pending
61-
factory.owners.push(owner)
62-
} else {
65+
if (!isDef(factory.owners)) {
6366
const owners = factory.owners = [owner]
6467
let sync = true
68+
69+
if (owner) owner.$on('hook:destroyed', () => remove(owners, owner))
6570

6671
const forceRender = (renderCompleted: boolean) => {
6772
for (let i = 0, l = owners.length; i < l; i++) {

0 commit comments

Comments
 (0)