Javascript. Порядок выполнения асинхронных функций - PullRequest
2 голосов
/ 18 июня 2020

Только что разговаривал со своим тимлидом, и у меня есть некоторые сомнения по поводу его слов, ищу помощи профессионалов.

Например, у нас есть три asyn c функции

const fetchViewers = async () => { 
   const viewers = await fetch(...);
   this.setState({ viewers });
};
const fetchPolls = async () => {
   const polls = await fetch(...);
   this.setState({ polls });
};
const fetchRegistrants = async () => {
   const registrants = await fetch(...);
   this.setState({ registrants })
};

И мы вызываем их в таком порядке

const init = () => {
   fetchViewers();
   fetchPolls();
   fetchRegistrants();
}

И скажем, выборка зрителей занимает гораздо больше времени, чем два других, мой вопрос, есть ли причина ставить fetchViewers последним ? Поскольку мы не ждем, пока они будут разрешены в функции init, я почти уверен, что это не имеет значения, потому что это влияет только на порядок, в котором они будут помещены в стек, а вызовы будут выполняться ДОМ. Если это имеет значение, пожалуйста, объясните подробнее, почему.

1 Ответ

2 голосов
/ 18 июня 2020

Асинхронные функции по-прежнему работают синхронно до первой await. Поэтому, если вы проделаете долгую подготовку перед фактическим асинхронным действием, порядок имеет значение. Также, если асинхронная задача обращается к общему ресурсу (например, они блокируют одну и ту же базу данных), порядок может влиять на то, насколько хорошо задачи могут выполняться параллельно (хотя это выходит за рамки JS ') ). Однако в данном случае я не могу видеть синхронный код / ​​общий ресурс (за исключением полосы пропускания, но это вряд ли имеет значение), поэтому не имеет значения . Чтобы дать точный ответ, перемешайте звонки (6 комбинаций, так что это не так уж и много) и измерьте это .

...