#javascript #for-loop #async-await #promise
Вопрос:
Как мне выполнить рефакторинг этого кода с помощью цикла for:
const [userA, userB, userC, userD] = await Promise.all([ createTestUser(), createTestUser(), createTestUser(), createTestUser() ]);
Комментарии:
1.
for
Цикл здесь был бы неправильным подходом, потому что он выполнялся бы последовательно — вам нужноPromise.all
. Ваше желание сделать код менее повторяющимся?2. да, возможно, мне придется изменить количество тестовых пользователей, которых я захочу создать для тестов. Поэтому я ищу способ передать номер (например. 4, 8, 10, …).
Ответ №1:
Вы можете сделать
const userPromises = []; for (let i=0; ilt;4; i ) { userPromises.push(createTestUser()); } const users = await Promise.all(userPromises); // const [userA, userB, userC, userD] = users;
Или, немного короче:
const users = await Promise.all(Array.from({length: 4}, _ =gt; createTestUser()));
Комментарии:
1. Вы можете исключить оболочку функции стрелки и просто передать
createTestUser
ее в качестве второго аргументаArray.from
.2. @trincot Я думал об этом, но предпочел убедиться, что
createTestUser
это вызывается без аргументов (вместоundefined
и индекса).