/
erioxis
/
web-nodejs
Обзор
Документация
Войти
/
erioxis
/
web-nodejs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/node_modules/thread-stream/lib/wait.js
61 строка
2 KB
erioxis
lab11fix
15 дек 2025, 23:21
15 дек 2025, 23:21
70dc7ba
Код
Авторство
О чём код?
'use strict' const MAX_TIMEOUT = 1000 function wait (state, index, expected, timeout, done) { const max = Date.now() + timeout let current = Atomics.load(state, index) if (current === expected) { done(null, 'ok') return } let prior = current const check = (backoff) => { if (Date.now() > max) { done(null, 'timed-out') } else { setTimeout(() => { prior = current current = Atomics.load(state, index) if (current === prior) { check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2) } else { if (current === expected) done(null, 'ok') else done(null, 'not-equal') } }, backoff) } } check(1) } // let waitDiffCount = 0 function waitDiff (state, index, expected, timeout, done) { // const id = waitDiffCount++ // process._rawDebug(`>>> waitDiff ${id}`) const max = Date.now() + timeout let current = Atomics.load(state, index) if (current !== expected) { done(null, 'ok') return } const check = (backoff) => { // process._rawDebug(`${id} ${index} current ${current} expected ${expected}`) // process._rawDebug('' + backoff) if (Date.now() > max) { done(null, 'timed-out') } else { setTimeout(() => { current = Atomics.load(state, index) if (current !== expected) { done(null, 'ok') } else { check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2) } }, backoff) } } check(1) } module.exports = { wait, waitDiff }