BehaviorSubject <Object []> возвращает ошибочный массив при первой .subscribe - PullRequest
0 голосов
/ 03 июня 2019

У меня есть BehaviorSubject, и первый обратный вызов .subscribe возвращает массив с 6 объектами и на консольном выходе показывает length: 6, но каждый цикл for повторяется только 5 раз и даже console.log (arr.length) выходы '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

Как это может произойти? Множество различных сервисов пишут (objects.next) в этот объект BehaviorSubject, но как я могу предотвратить это? Это случается только в первый раз, когда 'objects' .next-ed, из второго .next в этом коде отлично работает и показывает реальную длину.

Я также протестировал .find и .filter в массиве, но он может фильтровать только 5 последних записей, но не первую

1 Ответ

1 голос
/ 03 июня 2019

Первое: ваши предметы по поведению должны быть либо защищенными, либо личными. В противном случае вы открыты для уязвимостей.

С этим сказал. Вы создаете субъект поведения с начальным значением ([]). когда вы подписываетесь, это значение испускается ([]). Затем выдается первый метод next (). Так как оба перекрываются, то вы получите массив из 6 длин. Если я не ошибаюсь, этого не должно произойти, если вы используете Subject () вместо BehaviorSubject, или это просто ошибка в слишком большом выводе console.log.

...