MCPcopy
hub / github.com/vuejs/core / setup

Function setup

packages/runtime-core/src/apiAsyncComponent.ts:162–266  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

160 },
161
162 setup() {
163 const instance = currentInstance!
164 markAsyncBoundary(instance)
165
166 // already resolved
167 if (resolvedComp) {
168 return () => createInnerComp(resolvedComp!, instance)
169 }
170
171 const onError = (err: Error) => {
172 pendingRequest = null
173 handleError(
174 err,
175 instance,
176 ErrorCodes.ASYNC_COMPONENT_LOADER,
177 !errorComponent /* do not throw in dev if user provided error component */,
178 )
179 }
180
181 // suspense-controlled or SSR.
182 if (
183 (__FEATURE_SUSPENSE__ && suspensible && instance.suspense) ||
184 (__SSR__ && isInSSRComponentSetup)
185 ) {
186 return load()
187 .then(comp => {
188 return () => createInnerComp(comp, instance)
189 })
190 .catch(err => {
191 onError(err)
192 return () =>
193 errorComponent
194 ? createVNode(errorComponent as ConcreteComponent, {
195 error: err,
196 })
197 : null
198 })
199 }
200
201 const loaded = ref(false)
202 const error = ref()
203 const delayed = ref(!!delay)
204
205 let timeoutTimer: ReturnType<typeof setTimeout> | undefined
206 let delayTimer: ReturnType<typeof setTimeout> | undefined
207
208 onUnmounted(() => {
209 if (timeoutTimer != null) clearTimeout(timeoutTimer)
210 if (delayTimer != null) clearTimeout(delayTimer)
211 })
212
213 if (delay) {
214 delayTimer = setTimeout(() => {
215 if (instance.isUnmounted) return
216 delayed.value = false
217 }, delay)
218 }
219

Callers

nothing calls this directly

Calls 6

markAsyncBoundaryFunction · 0.90
refFunction · 0.90
isKeepAliveFunction · 0.90
createInnerCompFunction · 0.85
loadFunction · 0.70
onErrorFunction · 0.70

Tested by

no test coverage detected