Web サーバとバックグラウンド処理を両方やってるとき 共有してる変数の状態が中途半端な状態のものを使って処理してレスポンス返すのを防ぎたい
バックグラウンド処理の途中では Web サーバのリクエストが来ても待機してバックグラウンド処理を実行してないときに Web サーバの処理をしてレスポンス返したい

共有してる変数に Promise を入れてバックグラウンド処理が始まると未解決の Promise をセット
終わったらそれを resolve
リクエストがきたときは 最初にその Promise を await すれば良い

let count = 0
let waiting = null

let lock_count = 0
let resolve = null

const lock = () => {
lock_count++
console.log("LOCK+", lock_count, count)
if(!waiting) {
waiting = new Promise(r => resolve = r)
}
}

const unlock = () => {
lock_count--
console.log("LOCK-", lock_count, count)
if(lock_count === 0) {
resolve()
waiting = null
}
}

const wait = ms => new Promise(r => setTimeout(r, ms))

// バックグラウンド処理
setInterval(async () => {
lock()
await wait(Math.random() * 5000)
count++
unlock()
}, 3000)

// Web サーバ
require("http").createServer(async (req, res) => {
await waiting
res.end(String(count))
}).listen(9123)

コレくらいにシンプルだといいけど Web サーバでリクエストを処理するときに 最初以外のバックグラウンド処理の待機以外で 途中に await が混ざると await 後はまたバックグラウンド処理を始めてる可能性あり
await が入るならリクエスト処理中はバックグラウンド処理を始めないようにバックグラウンド処理側でもリクエスト処理の await 入れたほうが良さそう
ここまで来ると複雑だし いい感じのライブラリ探してそれに任せたほうがいいかも