2017-08-11 03:43:20 +00:00
|
|
|
function createMutex(doWork) {
|
|
|
|
const mutex = {}
|
|
|
|
|
2017-08-11 05:11:55 +00:00
|
|
|
return function (key, payload, callback) {
|
2017-08-11 03:43:20 +00:00
|
|
|
if (mutex[key]) {
|
|
|
|
mutex[key].push(callback)
|
|
|
|
} else {
|
|
|
|
mutex[key] = [ function () {
|
|
|
|
delete mutex[key]
|
|
|
|
}, callback ]
|
|
|
|
|
2017-08-11 05:11:55 +00:00
|
|
|
doWork(payload, function (error, value) {
|
2017-08-11 03:43:20 +00:00
|
|
|
mutex[key].forEach(function (callback) {
|
|
|
|
callback(error, value)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = createMutex
|