RXJS中的AsyncSubject有什么意义?

Cod*_*rer 11 observable rxjs

文档RxJS定义AsyncSubject如下:

AsyncSubject是一种变体,只有Observable执行的最后一个值才会发送给它的观察者,并且只有在执行完成时才会发送.

我不知道在哪里/为什么我需要使用这个主题变体.有人可以提供解释或现实世界的例子来说明它存在的原因及其优点吗?

Ric*_*sen 14

看起来它对于获取和缓存(一次性)资源非常有用,因为http.get通常会发出一个响应然后完成.

来自rxjs/spec/subjects/AsyncSubject-spec.ts

它('应该在完成时发出最后一个值',()=> {
it('在完成后订阅时应该发出最后一个值',()=> {
it('应该继续向后续订阅发送最后一个值', ()=> {

然后,在获取之后订阅的组件将获取值,但情况并非如此 Subject

const subject = new Rx.Subject();
const asyncSubject = new Rx.AsyncSubject();

// Subscribe before
subject.subscribe(x => console.log('before complete - subject', x))
asyncSubject.subscribe(x => console.log('before complete - asyncSubject', x))

subject.next('value 1');
subject.complete();
subject.next('value 2');

asyncSubject.next('value 1');
asyncSubject.complete();
asyncSubject.next('value 2');

// Subscribe after
subject.subscribe(x => console.log('after complete - subject', x))
asyncSubject.subscribe(x => console.log('after complete - asyncSubject', x))
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% ! important; top: 0 }
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.js"></script>
Run Code Online (Sandbox Code Playgroud)