fatsify核心功能示例测试!!!
This commit is contained in:
61
node_modules/thread-stream/lib/wait.js
generated
vendored
Normal file
61
node_modules/thread-stream/lib/wait.js
generated
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
'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 }
|
||||
Reference in New Issue
Block a user