0

投稿を送信するたびに配列が指数関数的に増加するという問題があります。投稿を最後に更新したときのタイムスタンプを更新するために、各投稿の後にユーザーオブジェクトが更新されているため、2番目のオブザーバブルで発生していると思います。

重複が配列に挿入されるのを防ぐために、その投稿が既に配列にある場合は、内側のオブザーバブルをチェックしようとしています。何らかの理由でこれが機能していません。

 loadPosts(url: string) {
    switch (url) {
        case '/timeline/top':
            this.postsService.subscribeAllPosts(this.selectedArea)
                .subscribe(posts => {
                    let container = new Array<PostContainer>();
                    for (let post of posts) {
                        this.getEquippedItemsForUsername(post.username).subscribe(x => {
                                try {
                                    if (container.indexOf(new PostContainer(post, x[0].equippedItems)) === -1) {
                                        container.push(new PostContainer(post, x[0].equippedItems));
                                    }
                                     console.log( container); // grows exponentially after each submitted post
                                } catch (ex) { }
                            }
                        );
                    }
                    this.postContainers = container; // postContainers is the array that is being looped over in the html.
                });
            break;
   }

}
4

2 に答える 2

2

あなたの問題は、 newPostContainerを作成することで、 にない新しいオブジェクトを作成しているcontainerため、すべてpostの inが追加されることpostsです。

代わりに、 の一意の値がpostのどのアイテムにも存在しないことを確認する必要があります。container

何かのようなもの:

if (container.findIndex((postContainer) => postContainer.id === post.id) === -1) {
    continer.push(new PostContainer(post, x[0].equippedItems));
}
于 2016-12-14T19:52:04.730 に答える