/** * async-lock sample. * use promise. */ "use strict"; //const fs = require('fs'); const path = require('path'); //const https = require('https'); const express = require('express'); const app = express(); app.use(express.static(path.join(__dirname, 'public'))); // let webServer = https.createServer({ // key: fs.readFileSync('server-key.pem'), // cert: fs.readFileSync('server-crt.pem'), // maxVersion: 'TLSv1.3', // minVersion: 'TLSv1', // }, app) // .listen(8443, function() { // console.log('start. (exit: Ctrl + C)'); // } // ); let webServer = app.listen(8080, () => { console.log('start. (exit: Ctrl + C)'); }); const AsyncLock = require('async-lock'); const lock = new AsyncLock({ timeout: 60000 }); const lockKey = 'key'; let count = 0; // sleep function. const sleep = (ms) => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, ms); }); }; // execute function. async function execute(done) { console.log(Date.now() + ' execute'); await sleep(5000); console.log(Date.now() + ' sleep end'); count++; done(undefined, 'execute end. count=' + count); } app.get('/start-lock', (request, response) => { lock.acquire(lockKey, execute) .then(result => { // lock released. console.log(Date.now() + ' start-lock execute end.'); console.log(Date.now() + ' response send start.'); response.send(result); console.log(Date.now() + ' response send end.'); }).catch(err => { // lock released. console.error(err.message); response.send('error.'); }); }); app.get('/start-lock2', (request, response) => { lock.acquire(lockKey, execute) .then(result => { // lock released. console.log(Date.now() + ' start-lock2 execute end.'); console.log(Date.now() + ' response send start.'); response.send(result); console.log(Date.now() + ' response send end.'); }).catch(err => { // lock released. console.error(err.message); response.send('error.'); }); });