From dd3893b1343bcb56af7219e2b47fa7397c1bb1c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 10 Feb 2020 13:49:04 -0500 Subject: [PATCH] fix: move start/stop every iteration --- src/groups/index.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/groups/index.js b/src/groups/index.js index c6db18e99f..bf2a93cf97 100644 --- a/src/groups/index.js +++ b/src/groups/index.js @@ -154,12 +154,17 @@ Groups.getOwnersAndMembers = async function (groupName, uid, start, stop) { } }); + let done = false; let returnUsers = owners; - const memberStart = Math.max(0, start - ownerUids.length + 1); - const memberStop = memberStart + countToReturn; - + let memberStart = start - ownerUids.length + 1; + let memberStop = memberStart + countToReturn - 1; + memberStart = Math.max(0, memberStart); + memberStop = Math.max(0, memberStop); async function addMembers(start, stop) { let batch = await user.getUsersFromSet('group:' + groupName + ':members', uid, start, stop); + if (!batch.length) { + done = true; + } batch = batch.filter(user => user && user.uid && !ownerUids.includes(user.uid.toString())); returnUsers = returnUsers.concat(batch); } @@ -167,9 +172,11 @@ Groups.getOwnersAndMembers = async function (groupName, uid, start, stop) { if (stop === -1) { await addMembers(memberStart, -1); } else { - while (returnUsers.length < countToReturn) { + while (returnUsers.length < countToReturn && !done) { /* eslint-disable no-await-in-loop */ await addMembers(memberStart, memberStop); + memberStart += countToReturn; + memberStop += countToReturn; } }