Rxjs:Observable.First与Single vs Filter之间的差异

Sac*_*aur 6 rxjs

我正在探索RxJS库,真的是使用Observable而不是Promise的粉丝.但是,有人可以提供有关使用之间差异的任何详细信息

  • Observable.First
  • Observable.Single
  • 以这样的方式应用过滤器,使其仅返回单个项目

在这个库中特别需要Single?

Ser*_*lov 10

如果通过过滤器你的意思是:

let emitted = false;
obs = obs.filter(x => {
  if(emitted) {
    return false;
  } else {
    emitted = true;
    return true;
  }
});
Run Code Online (Sandbox Code Playgroud)

过滤(在这种特殊情况下,检查上面的代码)

出现第一个项目时会立即发出.将忽略所有后续项目.将在source observable完成时完成.

in : -1-2-3--|---
out: -1------|---
Run Code Online (Sandbox Code Playgroud)

第一

出现第一个项目时会立即发出.将在此之后完成.

in : -1-2-3--|---
out: -1|----------
Run Code Online (Sandbox Code Playgroud)

如果source observable发出多个事件,则会失败.

in : -1-2-3--|---
out: -1-X---------
Run Code Online (Sandbox Code Playgroud)

当source observable完成时会发出(并且single可以确定不会发出更多内容).将在此之后完成.

in : -1------|---
out: --------1|--
Run Code Online (Sandbox Code Playgroud)

  • 仅添加注释以免引起将来读者的困惑-“ filter”本身不会忽略后续项目。它仅在您的示例中这样做,因为设置了布尔值(按设计)。如果阅读示例代码,则行为很明显,但是乍一看,这些看起来像是对不同运算符的通用描述。您确实回答了想要“以仅返回单个项目的方式应用过滤器”的发问者,尽管我不确定您为什么要这样做。这会让以后阅读它的人非常困惑! (2认同)