dx(suspense): warn when using async setup when not inside a Suspense boundary (#5565)

close #3649
This commit is contained in:
Thorsten Lünborg
2022-04-13 11:36:43 +02:00
committed by GitHub
parent 57ca32b096
commit 053c65bc5e
2 changed files with 31 additions and 2 deletions

View File

@@ -654,7 +654,6 @@ function setupStatefulComponent(
if (isPromise(setupResult)) {
setupResult.then(unsetCurrentInstance, unsetCurrentInstance)
if (isSSR) {
// return the promise so server-renderer can wait on it
return setupResult
@@ -668,6 +667,15 @@ function setupStatefulComponent(
// async setup returned Promise.
// bail here and wait for re-entry.
instance.asyncDep = setupResult
if (__DEV__ && !instance.suspense) {
const name = Component.name ?? 'Anonymous'
warn(
`Component <${name}>: setup function returned a promise, but no ` +
`<Suspense> boundary was found in the parent component tree. ` +
`A component with async setup() must be nested in a <Suspense> ` +
`in order to be rendered.`
)
}
} else if (__DEV__) {
warn(
`setup() returned a Promise, but the version of Vue you are using ` +