()
| 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 |
nothing calls this directly
no test coverage detected