BehaviorSubject <Object []>在第一个.subscribe

时间:2019-06-03 12:15:31

标签: angular typescript ionic-framework ionic4 ionic-native

我有一个BehaviorSubject,并且第一个.subscribe回调返回一个包含6个对象的数组,并且在控制台输出上,它显示length: 6,但是每个for循环仅重复5次,甚至console.log(arr。长度)输出“ 5”

我真的不知道如何复制它,但是没有以下代码:

public objects: BehaviorSubject<Object[]> = new BehaviorSubject([]);

// other class
            this.objectService.objects.subscribe(_objects => {
                if (_objects) {
                    for (const obj of _objects) {
                        console.log(obj);
                    }
                    console.log(_objects);
                    console.log(_objects.length);
                }
            });

输出: Output

这怎么可能发生?许多不同的服务都向该BehaviorSubject写入(objects.next),但是如何防止这种情况发生? 仅在第一次“对象”被.next-发生时发生,此代码上的第二个“ .next”才完美工作并显示实际长度。

我还在数组上测试了.find和.filter,但是它只能过滤最后5个条目,而不能过滤第一个条目

1 个答案:

答案 0 :(得分:1)

首先:您的“行为”主题应受保护或不公开。否则,您将面临漏洞。

话虽如此。您正在创建一个初始值为([])的行为主题。当您订阅时,将发出该值([])。然后,第一个“ next()”发出。由于两者重叠,因此您将获得一个6长度的数组。如果我没看错,那么如果您使用Subject()而不是BehaviorSubject,则不会发生这种情况,或者仅仅是console.log输出过多的错误。