MCPcopy Create free account
hub / github.com/angular/angular / setupBlocking

Function setupBlocking

packages/router/src/operators/setup_and_run_resources.ts:174–232  ·  view source on GitHub ↗
(
  route: ActivatedRoute,
  resourceResult: ResourceResult,
  blockingResourcePromises: Array<Promise<void>>,
  abortSignal: AbortSignal,
)

Source from the content-addressed store, hash-verified

172}
173
174function setupBlocking(
175 route: ActivatedRoute,
176 resourceResult: ResourceResult,
177 blockingResourcePromises: Array<Promise<void>>,
178 abortSignal: AbortSignal,
179) {
180 if (abortSignal.aborted) return;
181 const childInjector = route._localInjector;
182 if (!childInjector || !resourceResult) return;
183
184 for (const r of Object.values(resourceResult)) {
185 const res = r as InternalRouterResource;
186 if (res[BLOCKING_SYMBOL] === false) {
187 continue;
188 }
189 const promise = new Promise<void>((resolve, reject) => {
190 const underlyingRes = res[SOURCE_RESOURCE_SYMBOL];
191 let isDestroyed = false;
192 let unregisterOnDestroy: (() => void) | undefined;
193
194 const cleanup = () => {
195 isDestroyed = true;
196 blockingEffect.destroy();
197 unregisterOnDestroy?.();
198 abortSignal.removeEventListener('abort', onAbort);
199 };
200
201 const onAbort = () => {
202 cleanup();
203 resolve();
204 };
205
206 abortSignal.addEventListener('abort', onAbort, {once: true});
207
208 const blockingEffect = effect(
209 () => {
210 if (isDestroyed) {
211 return;
212 }
213 const status = underlyingRes.status();
214 if (status === 'error') {
215 cleanup();
216 reject(underlyingRes.error());
217 } else if (hasValueOrResolved(underlyingRes)) {
218 cleanup();
219 resolve();
220 }
221 },
222 {injector: childInjector, manualCleanup: true},
223 );
224
225 unregisterOnDestroy = childInjector.get(DestroyRef).onDestroy(() => {
226 cleanup();
227 resolve();
228 });
229 });
230 blockingResourcePromises.push(promise);
231 }

Callers 2

setupNewRouterResourcesFunction · 0.85
updateExistingResourcesFunction · 0.85

Calls 12

effectFunction · 0.90
hasValueOrResolvedFunction · 0.90
rejectFunction · 0.85
valuesMethod · 0.80
cleanupFunction · 0.70
addEventListenerMethod · 0.65
errorMethod · 0.65
onDestroyMethod · 0.65
getMethod · 0.65
resolveFunction · 0.50
statusMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected