diff --git a/packages/runtime-core/__tests__/components/Suspense.spec.ts b/packages/runtime-core/__tests__/components/Suspense.spec.ts
index 65e801de277..8da9a2017df 100644
--- a/packages/runtime-core/__tests__/components/Suspense.spec.ts
+++ b/packages/runtime-core/__tests__/components/Suspense.spec.ts
@@ -573,7 +573,14 @@ describe('Suspense', () => {
const Comp: ComponentOptions<{ data: string }> = {
props: ['data'],
setup(props) {
- return () => h(Async, { 'data-test': props.data })
+ const val = ref('1')
+ onMounted(async () => {
+ val.value = '2'
+ await new Promise(r => setTimeout(r, 5))
+ val.value = '1'
+ })
+ return () =>
+ h(Async, { 'data-test': props.data, 'data-val': val.value })
},
}
@@ -595,7 +602,13 @@ describe('Suspense', () => {
render(h(Root), root)
expect(serializeInner(root)).toBe(`
fallback
`)
await mounted
- expect(serializeInner(root)).toBe(`async
`)
+ expect(serializeInner(root)).toBe(
+ `async
`,
+ )
+ await new Promise(r => setTimeout(r, 5))
+ expect(serializeInner(root)).toBe(
+ `async
`,
+ )
})
test('nested suspense (parent resolves first)', async () => {
diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts
index 3d1cc6849c7..87c8d8ccde2 100644
--- a/packages/runtime-core/src/renderer.ts
+++ b/packages/runtime-core/src/renderer.ts
@@ -1435,10 +1435,10 @@ function baseCreateRenderer(
updateComponentPreRender(instance, next, optimized)
}
// and continue the rest of operations once the deps are resolved
- nonHydratedAsyncRoot.asyncDep!.then(() => {
+ nonHydratedAsyncRoot.asyncDep!.then().then(() => {
// the instance may be destroyed during the time period
if (!instance.isUnmounted) {
- componentUpdateFn()
+ update()
}
})
return