空数组时停止间隔
Stop interval when empty array
我从服务器端收到一堆消息,我想通过向管道添加一个间隔来伪造输入。
我现在正在这样做:
const stream = interval(1000)
.pipe(
map((): Message => {
return messages.pop();
})
);
this.feed = merge(
stream,
this.local
).pipe(
scan((acc, x) => [...acc, x], [])
);
但是我希望它在我的数组 'messages' 为空时停止间隔,有人可以帮我吗?我一直在尝试实施 .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
为空时 returns undefined
变为布尔值时 false
因此 takeWhile(Boolean)
将完成流。
我从服务器端收到一堆消息,我想通过向管道添加一个间隔来伪造输入。
我现在正在这样做:
const stream = interval(1000)
.pipe(
map((): Message => {
return messages.pop();
})
);
this.feed = merge(
stream,
this.local
).pipe(
scan((acc, x) => [...acc, x], [])
);
但是我希望它在我的数组 'messages' 为空时停止间隔,有人可以帮我吗?我一直在尝试实施 .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
为空时 returns undefined
变为布尔值时 false
因此 takeWhile(Boolean)
将完成流。