MCPcopy
hub / github.com/prisma/prisma / waitForBatch

Function waitForBatch

packages/client/src/runtime/utils/waitForBatch.ts:17–75  ·  view source on GitHub ↗
(
  promises: T,
)

Source from the content-addressed store, hash-verified

15 * @returns
16 */
17export function waitForBatch<T extends PromiseLike<unknown>[]>(
18 promises: T,
19): Promise<{ [K in keyof T]: Awaited<T[K]> }> {
20 if (promises.length === 0) {
21 return Promise.resolve([] as { [K in keyof T]: Awaited<T[K]> })
22 }
23 return new Promise((resolve, reject) => {
24 const successfulResults = new Array(promises.length) as { [K in keyof T]: Awaited<T[K]> }
25 let bestError: unknown = null
26 let done = false
27 let settledPromisesCount = 0
28
29 const settleOnePromise = () => {
30 if (done) {
31 return
32 }
33 settledPromisesCount++
34 if (settledPromisesCount === promises.length) {
35 done = true
36 if (bestError) {
37 reject(bestError)
38 } else {
39 resolve(successfulResults)
40 }
41 }
42 }
43
44 const immediatelyReject = (error: unknown) => {
45 if (!done) {
46 done = true
47 reject(error)
48 }
49 }
50
51 for (let i = 0; i < promises.length; i++) {
52 promises[i].then(
53 (result) => {
54 successfulResults[i] = result
55 settleOnePromise()
56 },
57 (error) => {
58 if (!hasBatchIndex(error)) {
59 immediatelyReject(error)
60 return
61 }
62
63 if (error.batchRequestIdx === i) {
64 immediatelyReject(error)
65 } else {
66 if (!bestError) {
67 bestError = error
68 }
69 settleOnePromise()
70 }
71 },
72 )
73 }
74 })

Callers 2

_transactionWithArrayMethod · 0.90

Calls 4

hasBatchIndexFunction · 0.90
settleOnePromiseFunction · 0.85
immediatelyRejectFunction · 0.85
thenMethod · 0.65

Tested by

no test coverage detected