README
Event-Mutex
Processing synchronous style of async events (ex : Socket.io, Express.js ...)
Super simple to use
import EventMutex from 'event-mutex';
const eventMutex = new EventMutex();
eventMutex.enqueue({
execution: async () => {
console.log('this log will showing synchronous.');
},
timeout: 1000,
});
Table of contents
- Installation
- Async / Await
- Try / Catch (Exception)
- Example of Express & Socket.io
Installation
Inside your project folder do:
npm i event-mutex
Async / Await
import EventMutex from 'event-mutex';
const eventMutex = new EventMutex();
async function main() {
await eventMutex.enqueue({
execution: async () => {
console.log('Hello, Async World!');
},
});
console.log('this log will showing after exception');
}
main();
Try / Catch (Exception)
import EventMutex from 'event-mutex';
const eventMutex = new EventMutex();
async function delay(ms: number) {
return new Promise((resolve, _reject) => {
setTimeout(() => {
resolve(true);
}, ms);
});
}
async function main() {
try {
await eventMutex.enqueue({
execution: async () => {
console.log('This event will use 2000ms');
await delay(2000);
},
timeout: 1000, // timeout
});
} catch (err) {
console.log(err.message);
}
console.log('this log will showing after exception');
}
main();
Example of Express & Socket.io
import EventMutex from 'event-mutex';
import socketIo from 'socket.io';
import http from 'http';
const app = require('express')();
const server = http.createServer(app);
const io = socketIo(server);
async function delay(ms: number) {
return new Promise((resolve, _reject) => {
setTimeout(() => resolve(), ms);
});
}
const eventMutex = new EventMutex();
io.on('connection', (socket) => {
console.log(socket.id, 'connect');
socket.on('event', () => {
eventMutex.enqueue({
execution: async () => {
await delay(5000);
console.log(socket.id);
},
timeout: 1000,
});
});
socket.on('tableJoin', () => {
eventMutex.enqueue({
execution: async () => {
console.log(socket.id);
},
timeout: 1000,
});
});
socket.on('disconnect', () => {
eventMutex.enqueue({
execution: async () => {
console.log(socket.id, 'disconnect');
},
timeout: 1000,
});
});
});
app.get('/', (_req, res) => {
eventMutex.enqueue({
execution: async () => {
console.log('Get Web Request');
res.send('Hi!');
},
timeout: 1000,
});
});
server.listen(3000);
console.log('server start!');