Async mutex

import { Semaphore } from 'async-mutex'
import fs from 'fs/promises'

async function asyncProcessWithMutex() {
	let semaphore = new Semaphore(3) // set to 3 because this to handle 3 async process, if you only handle 1 async use Mutex
	let [isNumber, isRelease] = await semaphore.acquire()
	try {
		const data1 = await fs.readFile('index1.txt')
		console.log(data1.toString())

		const data2 = await fs.readFile('index2.txt')
		console.log(data2.toString())

		const data3 = await fs.readFile('index3.txt')
		console.log(data3.toString())
	} catch (e) {
		console.error(e)
		isRelease()
	} finally {
		isRelease()
	}
}

async function asyncProcessWithoutMutex() {
	try {
		const data1 = await fs.readFile('index1.txt')
		console.log(data1.toString())

		const data2 = await fs.readFile('index2.txt')
		console.log(data2.toString())

		const data3 = await fs.readFile('index3.txt')
		console.log(data3.toString())
	} catch (e) {
		console.error(e)
	}
}

setInterval(async () => {
	await asyncProcessWithMutex()
	console.log('process with mutex \n')
}, 2000)

setInterval(async () => {
	await asyncProcessWithoutMutex()
	console.log('process without mutex \n')
}, 2500)
Restu Wahyu Saputra