Created
May 24, 2019 14:19
-
-
Save YuukiTsuchida/5e2d524a8af31ff9d742659fd37d88fd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = class SubTrigger { | |
constructor() { | |
this.data = {}; | |
this.exclusive = null; | |
} | |
addTrigger(triggerName) { | |
this.data[triggerName] = false; | |
} | |
setExclusive(triggerName, flag, availabilityTime) { | |
if (flag) { | |
this.exclusive = triggerName; | |
if (arguments.length === 3) { | |
setTimeout(() => { | |
this.exclusive = null; | |
}, availabilityTime); | |
} | |
return; | |
} | |
this.exclusive = null; | |
} | |
setInclusive(triggerName, flag, availabilityTime) { | |
this.data[triggerName] = flag; | |
if (arguments.length === 3 && flag) { | |
setTimeout(() => { | |
this.data[triggerName] = false; | |
}, availabilityTime); | |
} | |
} | |
isTriggerOn(triggerName) { | |
if (this.exclusive === null) { | |
return this.data[triggerName]; | |
} | |
return this.exclusive === triggerName; | |
} | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Subtrigger = require("./subtrigger.js"); | |
const sleep = async (a, callback) => { | |
await new Promise(r => setTimeout(r, a)); | |
callback(); | |
}; | |
const trigger = new Subtrigger(); | |
trigger.addTrigger("test1"); | |
trigger.addTrigger("test2"); | |
trigger.addTrigger("test3"); | |
trigger.setInclusive("test1", true); | |
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`); | |
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`); | |
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`); | |
console.log("-------------------------------------------"); | |
trigger.setInclusive("test2", true); | |
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`); | |
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`); | |
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`); | |
console.log("-------------------------------------------"); | |
trigger.setExclusive("test3", true); | |
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`); | |
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`); | |
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`); | |
console.log("-------------------------------------------"); | |
trigger.setExclusive("test3", false); | |
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`); | |
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`); | |
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`); | |
console.log("-------------------------------------------"); | |
console.log("Exclusive Timeout"); | |
trigger.setExclusive("test3", true, 100); | |
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`); | |
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`); | |
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`); | |
console.log("-------------------------------------------"); | |
sleep(100, () => { | |
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`); | |
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`); | |
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`); | |
console.log("-------------------------------------------"); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment