mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-20 06:51:42 +00:00
see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const and https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
34 lines
No EOL
1.3 KiB
JavaScript
34 lines
No EOL
1.3 KiB
JavaScript
module.exports = (obj) => {
|
|
return async (eventName, data, func, cancelFunc) => {
|
|
let hiddenCancelled = false;
|
|
let cancelled = false;
|
|
let cancelCount = 0;
|
|
let defaultCancel = true;
|
|
const cancel = (dC=true, hidden=false) => { // Hidden shouldn't be used often but it's not hard to implement so meh
|
|
if (hidden) hiddenCancelled = true;
|
|
else {
|
|
cancelled = true;
|
|
cancelCount++;
|
|
}
|
|
defaultCancel = dC;
|
|
};
|
|
|
|
let resp;
|
|
|
|
await obj.emitThen(eventName + '_cancel', data, cancel).catch((err)=> setTimeout(() => {throw err;},0));
|
|
await obj.emitThen(eventName, data, cancelled, cancelCount).catch((err)=> setTimeout(() => {throw err;},0));
|
|
|
|
if (!hiddenCancelled && !cancelled) {
|
|
resp = func(data);
|
|
if (resp instanceof Promise) resp = await resp.catch((err)=> setTimeout(() => {throw err;},0));
|
|
if (typeof resp == 'undefined') resp = true;
|
|
} else if (cancelFunc && defaultCancel) {
|
|
resp = cancelFunc(data);
|
|
if (resp instanceof Promise) resp = await resp.catch((err)=> setTimeout(() => {throw err;},0));
|
|
if (typeof resp == 'undefined') resp = false;
|
|
}
|
|
await obj.emitThen(eventName + '_done', data, cancelled).catch((err)=> setTimeout(() => {throw err;},0));
|
|
|
|
return resp;
|
|
}
|
|
}; |