Вам не будет разрешено создавать два компонента для вашего класса ресурсов. Вы можете достичь того, чего вы пытаетесь достичь, используя один класс ресурсов.
Вот пример:
@Path("rest")
public class SampleResourceClass {
@Path("/public/pings")
@GET
public Responce getPings(){
/* Code Here */
}
@Path("/private/accounts")
@GET
public Response getAccounts(){
/* Code Here */
}
}
Я понимаю, что рекурсия настолько опасна, что я не знаю, может ли эта техника вызвать проблемы, когда количество обещаний / вызовов увеличивается. На ум приходят вопросы о накладных расходах и управлении памятью
blockquote>Рекурсивные подходы к вызовам с обещаниями, подобным вашему
getUserList
, в порядке .Единственная возможная проблема с памятью заключается в том, что ваш
allUsersTemp
массив может расти очень большим, пока он не превысит пределы вашего браузера. Однако задолго до этого вы должны задаться вопросом: будет ли полезно отображать сотые тысячи записей пользователей в одной большой таблице? В тех масштабах, когда память станет проблематичной, вам понадобятся более эффективные инструменты для управления вашей пользовательской базой, чем просто перечисление всех из них.Что касается стиля кода, я бы рекомендовал не объявлять
allUsersTemp
иpaginationToken
как изменяемые переменные более высокого уровня. Вместо этого задайте им параметры вашей рекурсивной функции и выполните обещание с результатом:function getUserList (paginationToken, allUsersTemp = []) => { // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return tempUserTest = CognitoIdentityServiceProvider.listUsersAsync({ UserPoolId: process.env.COGNITO_USER_POOL_ID, PaginationToken: paginationToken }).then(tempUser => { const allUsers = allUsersTemp.concat(tempUser.Users); const nextToken = tempUser.PaginationToken; if (nextToken) { return getUserList(nextToken, allUsers); // ^^^^^^^^^^^^^^^^^^^ } else { return allUsers; // ^^^^^^^^ } }); }
blockquote>
Promise.all
дождался выполнения обоих обещанийНет, Вы передавали массив только с одним обещанием
Promise.all
и вызывали вторую функцию после завершения первой. Чтобы запустить одновременно, он должен выглядеть какreturn Promise.all([ CognitoIdentityServiceProvider.listUsersInGroupAsync(adminParams), getUserList() ]).then(([{ Users: adminUsers }, allUsers]) => { … });