也许您应该阅读有关Rx.Subject()的这篇中型文章,以更好地了解它们的工作方式和作用: 了解rxjs BehaviorSubject,ReplaySubject和AsyncSubject在这种情况下不知道您当前的要求,但是也许您可以concat()上一个和最后一个值,或者选择ReplaySubject()(向观察者发出所有值).有点像这样的东西(TS): const currentValues: Thread[] = this.threads.getValues(); // "current" valuesconst newValues: Thread[] = newThreadsValues; //new Threads from somewherethis.threads.next(currentValues.concat(newValues); 这对于Thread数组是可行的,但是如果您只想添加Thread实体,则应该使用Rx.ReplaySubject() My thread variable contains 3 different elements. I want to create a For loop that iterates on these three objects.threads: BehaviorSubject<{[key: string]: Thread }> = new BehaviorSubject({});Here is my function:searchUser(): Observable<Thread> {this.searchArrayThreads = [];let element = document.getElementById('chat-window-input');return this.threads.map((threadDictionary: {[key: string]: Thread}) => { for( let key in threadDictionary ) { console.log("key", threadDictionary[key]); if(threadDictionary[key].participants[0].name.startsWith(str)) { return threadDictionary[key]; } }});}This function only works once. In her first call, she is iterating the 3 elements.Then it iterates just on the last element. 解决方案 Because that's the nature of BehaviourSubject, show the "current" value or in this case the last value pushed to it (don't know if push it's the right word but this is just to explanation purposes). When you use the next() method to add values to the subject it will show you the last value, in this case it will show you the last value, therefore, loop only once (because the last value it's just one).Maybe you should read this Medium article about Rx.Subject() to understand better how they work and what they do:Understanding rxjs BehaviorSubject, ReplaySubject and AsyncSubjectDon't know your current requirements in this particular case but maybe you can concat() previous and last values or maybe opt for ReplaySubject() (that emit all values to the observers).Something ROUGHLY like this (TS):const currentValues: Thread[] = this.threads.getValues(); // "current" valuesconst newValues: Thread[] = newThreadsValues; //new Threads from somewherethis.threads.next(currentValues.concat(newValues);This woulds work for Thread arrays but if you want to add only a a Thread entity you should go for Rx.ReplaySubject() 这篇关于在BehaviorSubject流上循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
09-02 04:26