Второй подход будет более производительным.
В первом примере предположим, что для возврата каждого запроса требуется 1 секунда, поэтому вам потребуется не менее 3 + секунд, чтобы вернуть результаты, пока вы ждете результата одного запроса, прежде чем делать следующий.
Во втором подходе вы делаете все запросы одновременно, а затем ждете обратного вызова IO.После обработки всех запросов Promise.all()
разрешится.Если каждый запрос занимает ~ 1 секунду, но выполняется параллельно, ваш ответ также будет составлять около 1 секунды.
Я бы использовал синтаксис, подобный следующему, однако для поддержания читабельности, как вы, кажется, используете async/await
и donне нужно иметь ссылку на promises
.
try {
const [addresses, emails, phones] = await Promise.all([
searchArray.includes('address')
? axios('./getAddress') : Promise.resolve({}),
searchArray.includes('email')
? axios('./email') : Promise.resolve({}),
searchArray.includes('phone')
? axios('./phone') : Promise.resolve({}),
]);
return res.status(200).json({
addresses: addresses.data,
emails: emails.data,
phoneNumbers: phones.data,
});
} catch (err) {
return res.status(constants.HTTP_SERVER_ERROR).json(err);
}