Завершите поток и выдайте последнее значение

#javascript #rxjs

#javascript #rxjs

Вопрос:

Как завершить поток по условию, при этом излучая значение, при котором поток завершен?

 const MAX_VALUE = 6;
const competePredicate = data => data <= MAX_VALUE;

let imitationsOfClientConnection = of( 0, 1, 2, 3, 4, 5 );


imitationsOfClientConnection.pipe(
  scan((result, current) => result   current, 0),
  // <- what to write here?
).subscribe({
  next: data => console.log(`You won: ${ data } points!`),
  complete: () => console.log('complete')
});
 

Теперь вывод на консоль —

Вы выиграли: 0 очков!
Вы выиграли: 1 очко! Вы выиграли: 3 очка! Вы выиграли: 6 очков!
Вы выиграли: 10 очков!
Вы выиграли: 15 очков!
завершить

Какой код вам нужен, чтобы записать этот вывод на консоль, был следующим —

Вы выиграли: 0 очков!
Вы выиграли: 1 очко!
Вы выиграли: 3 очка! Вы выиграли: 6 очков!
завершить

Ответ №1:

takeWhile должно сработать.

 imitationsOfClientConnection.pipe(
  scan((result, current) => result   current, 0),
  takeWhile(total => total <= MAX_VALUE)
).subscribe(//...
 

https://stackblitz.com/edit/typescript-aycaxs?file=index.ts

Комментарии:

1. Вы действительно пытались?