Having an object to store data.
var store = {
elements: [],
eventsEnabled: true,
addElement: function(element) {
this.elements.push(element);
if (this.eventsEnabled) {
// Code that triggers event, calls handlers... whatever
}
}
};
The act of storing data comes from two events (kind of two producers). First "producer" does not trigger any event:
setInterval(function() {
store.eventsEnabled = false;
store.addElement('hello');
store.eventsEnabled = true;
}, 12000);
Second does trigger events:
setInterval(function() {
store.addElement('bye');
}, 7000);
The question is, can the second producer break execution flow of first producer?
I mean, if producer 1 disables events and, before finishing execution (and therefore before events are enabled again), producer 2 starts its execution and adds its element, then no events will be triggered. Is that possible? Can that happen?
If so, how can this code be converted to be kind-of thread-safe?
JavaScript is single-threaded. A function cannot be interrupted, so you can be sure each function block will complete before another begins.
(However, if a function makes an asynchronous call, other functions may execute before the asynchronous operation starts. That doesn't happen in your code, though, that I can see, besides the setTimeout
calls, and you can be sure those will execute in the correct order.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With