Как реорганизовать ряд функций в обещании в цикл

#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 и индекса).