【发布时间】:2021-06-08 16:07:03
【问题描述】:
我正在尝试一次将列表中的消息显示 1 秒钟。我无法使用interval(1000),因为我需要能够在满足条件后立即清除消息并显示下一条消息 1 秒。
目前为止
nextMessage() : Observable<any>{
this.currentMessage.next(this.messages[this.messagePointer++]);
return this.currentMessages;
}
subscribeMessage() : void{
this.currentMessage.pipe(switchMap(_=timer(1000).pipe(map(x=>this.nextMessage())))).subscribe(x=>console.log(x));
}
目前这不会产生任何结果。我的想法是,nextMessage 例程每 1 秒更新一次 currentMessage Observable,如果它在两者之间被外部源更新,则 Timer 将被取消并重新启动。 subscribe 方法目前不输出任何内容,但是如果我尝试这样做
this.currentMessage.pipe(tap(x=>console.log(x)),switchMap(_=timer(1000).pipe(map(x=>this.nextMessage())))).subscribe(x=>console.log(x));
我每隔 1 秒从我的数据输出中看到值。为什么点击有效,但订阅无效。
编辑
这是StackBlitz Demo的链接
【问题讨论】:
-
抱歉,
currentMessages是什么?无论如何,如果您可以提供完整的课程以便可以重现这将是很棒的,因为我真的认为这还不足以重现这个问题。还有什么_=我认为这是一个错字?最好的办法是,如果您可以与那里的完整示例共享一个 stackblitz,您可以这样做吗? -
另外
tap可能有效,因为它位于pipe的开头,所以它只是获取通过currentMessage流的新消息,而在tap你之后有那个switchMap这可能会破坏事情。 -
@DarioPiotrowicz 我添加了一个 StackBlitz 演示,展示了我的体验。我无法上传我的整个项目,但这就是与此问题相关的全部内容
-
太棒了,谢谢:),在你添加了stackblitz之后,我可以看到有人已经给出了一个全面的答案,所以我想我不再需要了:'(
标签: typescript rxjs observable