MCPcopy Index your code
hub / github.com/RustPython/RustPython / wait_all

Function wait_all

crates/wasm/Lib/asyncweb.py:153–195  ·  view source on GitHub ↗
(proms)

Source from the content-addressed store, hash-verified

151
152# basically an implementation of Promise.all
153def wait_all(proms):
154 cbs = CallbackPromise()
155
156 if not isinstance(proms, (list, tuple)):
157 proms = tuple(proms)
158 num_completed = 0
159 num_proms = len(proms)
160
161 if num_proms == 0:
162 cbs.resolve(())
163 return cbs
164
165 results = [None] * num_proms
166
167 # needs to be a separate function for creating a closure in a loop
168 def register_promise(i, prom):
169 prom_completed = False
170
171 def promise_done(success, res):
172 nonlocal prom_completed, results, num_completed
173 if prom_completed or cbs.done:
174 return
175 prom_completed = True
176 if success:
177 results[i] = res
178 num_completed += 1
179 if num_completed == num_proms:
180 result = tuple(results)
181 del results
182 cbs.resolve(result)
183 else:
184 del results
185 cbs.reject(res)
186
187 _resolve(prom).then(
188 lambda res: promise_done(True, res),
189 lambda err: promise_done(False, err),
190 )
191
192 for i, prom in enumerate(proms):
193 register_promise(i, prom)
194
195 return cbs
196
197
198if browser:

Callers

nothing calls this directly

Calls 6

resolveMethod · 0.95
CallbackPromiseClass · 0.85
isinstanceFunction · 0.85
lenFunction · 0.85
enumerateFunction · 0.85
register_promiseFunction · 0.85

Tested by

no test coverage detected