import { Component, OnInit } from
'@angular/core'
;
import {Observable} from
'rxjs'
;
@Component({
selector:
'app-my-page'
,
templateUrl:
'./my-page.component.html'
,
styleUrls: [
'./my-page.component.css'
]
})
export class MyPageComponent implements OnInit {
constructor() { }
ngOnInit() {
const multiSeq =
new
Observable(
this
.multiSeqSubs());
multiSeq.subscribe({
next(num) { console.log(
'1st subscribe: '
+ num); },
complete() { console.log(
'1st sequence finished.'
); }
});
setTimeout(() => {
multiSeq.subscribe({
next(num) { console.log(
'2nd subscribe: '
+ num); },
complete() { console.log(
'2nd sequence finished.'
); }
});
}, 1000);
}
multiSeqSubs() {
const seq = [];
for
(
var
i = 1; i <= 10; i++) {
seq.push(
'2 * '
+ i +
'='
+ 2*i)
}
const obs = [];
let timeStamp;
return
(ob) => {
obs.push(ob);
if
(obs.length === 1) {
timeStamp =
this
.exec_Sequence({
next(val) {
obs.forEach(o => o.next(val));
},
complete() {
obs.slice(0).forEach(o => o.complete());
}
}, seq, 0);
}
return
{
unsubscribe() {
obs.splice(obs.indexOf(ob), 1);
if
(obs.length === 0) {
clearTimeout(timeStamp);
}
}
};
};
}
exec_Sequence(observer, sequence, index) {
return
setTimeout(() => {
observer.next(sequence[index]);
if
(index === sequence.length - 1) {
observer.complete();
}
else
{
this
.exec_Sequence(observer, sequence, ++index);
}
}, 1000);
}
}