我正在使用RxJS进行项目并在几周内学习它。虽然我可以弄清楚事物(Observables,Observers,Subjects)是如何工作和理解它们的目的的,但我真的不知道Notifications的目的是什么。我已经阅读了源代码并了解了实现。但是,老实说,我甚至无法想到它们的简单或主要用例。有人可以告诉我一个亮点吗?
先谢谢
答案 0 :(得分:4)
您引用的文档提到:
此类对于管理通知的运营商特别有用,例如
materialize
,dematerialize
,observeOn
等。除了包装实际传递的值之外,它还使用元数据来注释它,例如,它是什么类型的推送消息(next
,error
或complete
)。
所以问题是关于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))