Остановить интервал при пустом массиве
Я получаю кучу сообщений со стороны сервера и хочу подделать набор текста, добавив интервал в канал.
Я делаю это сейчас:
const stream = interval(1000)
.pipe(
map((): Message => {
return messages.pop();
})
);
this.feed = merge(
stream,
this.local
).pipe(
scan((acc, x) => [...acc, x], [])
);
Но я хочу, чтобы он остановил интервал, когда мой массив 'messages' пуст, может кто-нибудь помочь мне, пожалуйста? Я пытался реализовать.TakeWhile безуспешно.
Заранее спасибо.
2 ответа
takeWhile работает нормально, вам нужно что-то вроде этого:
const stream = interval(1000)
.pipe(
takeWhile(() => messages.length > 0),
map(() => messages.pop()),
);
Я сделал небольшой пример на stackblitz, надеюсь, вы можете использовать это в своем приложении: https://stackblitz.com/edit/typescript-sq6wxb?file=index.ts
Итак, ваша проблема в том, что stream
продолжает излучать даже после messages
пустой.
Ты можешь использовать takeWhile
чтобы завершить поток:
const stream = interval(1000).pipe(
map((): Message => messages.pop()),
takeWhile(Boolean),
);
когда messages
пусто возвращает undefined
который false
когда обратился к логическому так takeWhile(Boolean)
завершит поток.