const a = [1, 2, 3, 4, 5, 6, 7,8];
rxjs.from(a.splice(0, 3))
.pipe(
rxjs.concatMap(val => {
return rxjs.of(val).pipe(rxjs.delay(Math.random() * 1000));
}),
rxjs.repeatWhen(completed => completed.pipe(rxjs.delay(2000))),
rxjs.tap(val => {
console.log(a);
}),
rxjs.takeWhile(val => a.length > 0)
)
.subscribe(() => {});
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/7.5.5/rxjs.umd.min.js"></script>
In above,I suppose it will console.log [4,5,6],and then [7,8],and then stop,but while it always console.log [4,5,6]。 I wonder know why it is and how to achive I want. Thanks!
You have to call splice inside the pipe
const a = [1, 2, 3, 4, 5, 6, 7,8];
rxjs.from(a.splice(0, 3))
.pipe(
rxjs.concatMap(val => {
return rxjs.of(val).pipe(rxjs.delay(Math.random() * 1000));
}),
rxjs.repeatWhen(completed => completed.pipe(rxjs.delay(2000))),
rxjs.tap(val => {
console.log(a);
a.splice(0, 3);
}),
rxjs.takeWhile(val => a.length > 0)
)
.subscribe(() => {});
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/7.5.5/rxjs.umd.min.js"></script>