Skip to content

Instantly share code, notes, and snippets.

@akoserwal
Created July 15, 2018 19:23
Show Gist options
  • Save akoserwal/756eed863d60c13d137f75244c04b2ce to your computer and use it in GitHub Desktop.
Save akoserwal/756eed863d60c13d137f75244c04b2ce to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/viqeled
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="[iterator & observer]">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
var Subject = function() {
var self = this;
self.observers = [];
return {
subscribe: function(observer) {
self.observers.push(observer);
},
unsubscribe: function(observer) {
var index = self.observers.indexOf(observer);
if (index > -1) {
self.observers.splice(index, 1);
}
},
notify: function(observer) {
var index = self.observers.indexOf(observer);
if (index > -1) {
self.observers[index].notify(index);
}
},
notifyAll: function() {
for (var i = 0; i < self.observers.length; i++) {
self.observers[i].notify(i);
}
},
notifyIterator: function() {
var i = 0;
return {
next: function(){
return i < self.observers.length ?
{value: self.observers[i++].notify(i), done: false}:
{done: true};
}
};
}
};
};
var Observer = function() {
return {
notify: function(index) {
console.log("Observer " + (index) + " is notified!");
}
}
}
var subject = new Subject();
var observer1 = new Observer();
var observer2 = new Observer();
var observer3 = new Observer();
var observer4 = new Observer();
subject.subscribe(observer1);
subject.subscribe(observer2);
subject.subscribe(observer3);
subject.subscribe(observer4);
var it = subject.notifyIterator();
it.next().value;
it.next().value;
it.next().value;
it.next().value;
console.log(it.next().done);
</script>
<script id="jsbin-source-javascript" type="text/javascript">var Subject = function() {
var self = this;
self.observers = [];
return {
subscribe: function(observer) {
self.observers.push(observer);
},
unsubscribe: function(observer) {
var index = self.observers.indexOf(observer);
if (index > -1) {
self.observers.splice(index, 1);
}
},
notify: function(observer) {
var index = self.observers.indexOf(observer);
if (index > -1) {
self.observers[index].notify(index);
}
},
notifyAll: function() {
for (var i = 0; i < self.observers.length; i++) {
self.observers[i].notify(i);
}
},
notifyIterator: function() {
var i = 0;
return {
next: function(){
return i < self.observers.length ?
{value: self.observers[i++].notify(i), done: false}:
{done: true};
}
};
}
};
};
var Observer = function() {
return {
notify: function(index) {
console.log("Observer " + (index) + " is notified!");
}
}
}
var subject = new Subject();
var observer1 = new Observer();
var observer2 = new Observer();
var observer3 = new Observer();
var observer4 = new Observer();
subject.subscribe(observer1);
subject.subscribe(observer2);
subject.subscribe(observer3);
subject.subscribe(observer4);
var it = subject.notifyIterator();
it.next().value;
it.next().value;
it.next().value;
it.next().value;
console.log(it.next().done);
</script></body>
</html>
var Subject = function() {
var self = this;
self.observers = [];
return {
subscribe: function(observer) {
self.observers.push(observer);
},
unsubscribe: function(observer) {
var index = self.observers.indexOf(observer);
if (index > -1) {
self.observers.splice(index, 1);
}
},
notify: function(observer) {
var index = self.observers.indexOf(observer);
if (index > -1) {
self.observers[index].notify(index);
}
},
notifyAll: function() {
for (var i = 0; i < self.observers.length; i++) {
self.observers[i].notify(i);
}
},
notifyIterator: function() {
var i = 0;
return {
next: function(){
return i < self.observers.length ?
{value: self.observers[i++].notify(i), done: false}:
{done: true};
}
};
}
};
};
var Observer = function() {
return {
notify: function(index) {
console.log("Observer " + (index) + " is notified!");
}
}
}
var subject = new Subject();
var observer1 = new Observer();
var observer2 = new Observer();
var observer3 = new Observer();
var observer4 = new Observer();
subject.subscribe(observer1);
subject.subscribe(observer2);
subject.subscribe(observer3);
subject.subscribe(observer4);
var it = subject.notifyIterator();
it.next().value;
it.next().value;
it.next().value;
it.next().value;
console.log(it.next().done);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment