MCPcopy
hub / github.com/angular/angular / SyncPromise

Class SyncPromise

packages/upgrade/src/common/src/promise_util.ts:22–67  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20 * Synchronous, promise-like object.
21 */
22export class SyncPromise<T> {
23 protected value: T | undefined;
24 private resolved = false;
25 private callbacks: ((value: T) => unknown)[] = [];
26
27 static all<T>(valuesOrPromises: (T | Thenable<T>)[]): SyncPromise<T[]> {
28 const aggrPromise = new SyncPromise<T[]>();
29
30 let resolvedCount = 0;
31 const results: T[] = [];
32 const resolve = (idx: number, value: T) => {
33 results[idx] = value;
34 if (++resolvedCount === valuesOrPromises.length) aggrPromise.resolve(results);
35 };
36
37 valuesOrPromises.forEach((p, idx) => {
38 if (isThenable(p)) {
39 p.then((v) => resolve(idx, v));
40 } else {
41 resolve(idx, p);
42 }
43 });
44
45 return aggrPromise;
46 }
47
48 resolve(value: T): void {
49 // Do nothing, if already resolved.
50 if (this.resolved) return;
51
52 this.value = value;
53 this.resolved = true;
54
55 // Run the queued callbacks.
56 this.callbacks.forEach((callback) => callback(value));
57 this.callbacks.length = 0;
58 }
59
60 then(callback: (value: T) => unknown): void {
61 if (this.resolved) {
62 callback(this.value!);
63 } else {
64 this.callbacks.push(callback);
65 }
66 }
67}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…