5. Observable pattern

by petrussola

JavaScript

const observers = [];

const observable = Object.freeze({
  notify: (data) => observers.forEach((observer) => observer(data)),
  subscribe: (func) => observers.push(func),
  unsubscribe: (func) =>
    observers.forEach((observer, index) => {
      if (observer === func) {
        observers.splice(index, 1);
      }
    })
});

function logger1(data) {
  console.log(`Hello from logger1: ${data}`);
}
function logger2(data) {
  console.log(`Hello from logger2: ${data}`);
}
function logger3(data) {
  console.log(`Hello from logger3: ${data}`);
}

observable.subscribe(logger1);
observable.subscribe(logger2);
observable.subscribe(logger3);

observable.notify("hey there");

observable.unsubscribe(logger3);

observable.notify("hey there");