可观察到的火只发生一次

时间:2018-07-02 10:26:54

标签: javascript angular rxjs reactive-programming

我决定在周末去this RxJS tutorial来学习有关反应式编程的知识。我们的目标是建立一个简单的页面,该页面使用Observables从Github用户API生成用户的交互式列表。

显示的列表是所检索用户总数的一个子集(在我的情况下为30个用户中的3个)。该列表需要可刷新(显示一组新用户),并且您需要能够通过单击每个相应条目上的“删除”按钮来从中删除条目。

我已经建立了一个Observable链来定义页面的行为。有些充当触发处理的事件,有些则发布处理后的结果以供应用程序使用。该链应该动态地导致我的列表被更新。当前,默认流程如下:

  • 启动!
  • 建议刷新触发! (在这里检索数据)
  • 30条新建议可用!
  • 触发列表更新! (这是我选择要显示3个用户的位置)
  • 列表已更新! (此时,列表显示在页面上)

在启动时通过刷新列表并从列表中删除某些内容来触发列表更新。但是,当我刷新列表时,会发生这种情况:

  • 单击刷新按钮!
  • 建议刷新已触发!
  • 30条新建议可用!

如您所见,未触发更新用户列表的触发器。据我了解,通过在流的开始处发出一些值,流的其余部分应因此而执行。但是,这似乎只是我第一次遍历整个链条时发生。我想念什么?

您可以找到我的项目here的运行版本。

1 个答案:

答案 0 :(得分:1)

我认为问题在于创建userStream$可观察的方式。

过滤未关闭的用户,然后取前三个,可以直接在displayEvents$通过filter传递到管道链的UserModel []数组上完成和slice的Array方法。

如果这样做,则无需使用from函数来创建Observable<UserModel>,然后必须在其上应用flatMap(目前更称为{{ 1}})最终应用mergeMap将其转换回UserModel数组。

换句话说,您可以像下面的示例中那样简化代码,其副作用是解决了刷新问题。

toArray

老实说,尽管我还没有完全理解为什么您的原始解决方案(这是一种漫长的绕道工作)不起作用。