}
async function dispatch (): Promise<bigint> {
- return new Promise(resolve => {
+ return new Promise(next => {
const attempts = []
- for (let i = 0; i < workers.length; i++) {
+ for (const w of workers) {
data.seed = bigintToHex((bigintRandom() & ~((1n << 24n) - 1n)), 16)
const attempt = new Promise((resolve, reject) => {
- const w = workers[i]
w.onerror = reject
- w.onmessage = (msg) => {
- const result = msg.data
- LOG: logger.log(`received result from worker ${i}`)
- resolve(result)
- }
- LOG: logger.log(`sending data to worker ${i}`)
+ w.onmessage = (msg) => resolve(msg.data)
w.postMessage(JSON.stringify(data))
})
attempts.push(attempt)
}
Promise.all(attempts).then(results => {
const result = results.find(r => typeof r === 'bigint')
- result ? resolve(result) : resolve(dispatch())
+ next(result ?? dispatch())
})
})
}