2017-09-27 91 views
0

下面是描述我想要做的事情的片段。在我的应用程序中,我有一个遍及使用的replayysubject。在某个时刻,我想获得主题发出的最后一个值,但last似乎无法在ReplaySubject上工作。如何从ReplaySubject获取最后一个值?

const subject = new Rx.ReplaySubject(); 

subject.next(1); 
subject.next(2); 
subject.next(3); 
subject.next(4); 

subject.subscribe(num => console.log(num)); 

var lastObserver = subject.last(); 
lastObserver.subscribe(num => console.log('last: ' + num)); 

FIDDLE

上面的代码不火的lastObserver什么,但认购的作品就好了。

回答

1

也许你的困惑是关于.last()运营商应该如何工作?

.last()应该等待一个流完成,然后给你在流结束之前发出的最后一个值。所以为了使它工作,流将需要结束。

我相信只要主题完成,您的lastObserver就会发光。

const subject = new Rx.ReplaySubject(); 

subject.next(1); 
subject.next(2); 
subject.next(3); 
subject.next(4); 

subject.subscribe(num => console.log(num)); 
subject.complete(); // end your stream here 
var lastObserver = subject.last(); 
lastObserver.subscribe(num => console.log('last: ' + num)); 

如果你不希望在信息流要结束了,但你希望用户能够接收订阅之前发出的最后的值,考虑深远的BehaviorSubject,这是专为这种使用情况。

+0

那么如果我完成没有其他订户会得到更新? – Smeegs

+0

没错。如果您需要新用户在订阅后立即收到最后一个发布,请抛弃'ReplaySubject' +'last',而只是使用'BehaviorSubject'。 – xtianjohns

+0

我确信我使用了错误的主题,但我不确定这是否正确。让我解释一下情况。这是一个发出api调用结果的主题。大部分用户希望下一个发射不是最后一个。但是,有一种情况我想看看最后发出的是什么。 – Smeegs

相关问题