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