什么是RxJS中的通知用例?

时间:2016-06-06 04:16:22

标签: javascript rxjs observable rxjs5

我正在使用RxJS进行项目并在几周内学习它。虽然我可以弄清楚事物(Observables,Observers,Subjects)是如何工作和理解它们的目的的,但我真的不知道Notifications的目的是什么。我已经阅读了源代码并了解了实现。但是,老实说,我甚至无法想到它们的简单或主要用例。有人可以告诉我一个亮点吗?

先谢谢

2 个答案:

答案 0 :(得分:4)

您引用的文档提到:

  

此类对于管理通知的运营商特别有用,例如materializedematerializeobserveOn等。除了包装实际传递的值之外,它还使用元数据来注释它,例如,它是什么类型的推送消息(nexterrorcomplete)。

所以问题是关于materialize之类的用例。

基本上,您使用materialize获取有关数据流的元信息,而不会产生相关的副作用(例如传播流中的错误,完成的流可以导致其他的完成溪流等)。 dematerialize可以恢复副作用。

以下是前SO问题的用例:

答案 1 :(得分:0)

一个用例:由于错误或完成会立即传播,因此您不能例如延迟它们。为此,您可以尝试以下方法:

// sample stream
interval(500).pipe(
  mapTo('normal value'),
  // sometimes value, sometimes throw
  map(v => {
    if (randomInt() > 50) {
     throw new Error('boom!')
    } else return v;
   }),
  materialize(),
  // turns Observable<T> into Notification<Observable<T>>
  // so we can delay or what you want
  delay(500),
  // and we need to do some magic and change Notification of error into
  // Notification of value (error message)
  map(n => n.hasValue? n : new Notification('N', n.error.message, null)),
  // back to normal
  dematerialize()
)
// now it never throw so in console we will have 
// `normal value` or `boom!` but all as... normal values (next() emmision)
// and delay() works as expected
.subscribe(v => console.log(v))
相关问题