Когда именно Axios Promise разрешен - PullRequest
1 голос
/ 24 октября 2019

Я думаю, что знаю ответ на вопрос, но я не нашел никакой документации по нему, поэтому хочу быть уверен, что я ничего не пропускаю.

const prom1 = axios.get('/user/1').then(res => {
  /* do stuff with response */
  return res;
});
const prom2 = axios.get('/user/2').then(res => {
  /* do stuff with response */
  return res;
});
Promise.all([prom1, prom2]).then(() => setLoading(false));

В примеревыше, .then из Promise.all() кажется всегда выполненным после axios.get().then(). Но действительно ли prom1 разрешается только после выполнения .then() axios?

Мое понимание / догадка:

axios.get('/user/1').then(...);
/* THOSE TWO ARE THE SAME */
const prom = axios.get('/user/1');
prom.then(...);

Причина, по которой .then() из Promise.all() всегда будет выполняться после axios.get().then(), заключается в том, что они выполняютсясинхронный и, следовательно, имеет значение, какой .then() вызывается первым?

Я знаю, что в качестве альтернативы всегда могу сделать:

const prom1 = axios.get('/user/1').then(res => res);
const prom2 = axios.get('/user/2').then(res => res);
Promise.all([prom1, prom2]).then(() => {
  prom1.then(...);
  prom2.then(...);
  setLoading(false);
});

Но это сработает только после того, как все обещания будут выполненыи если в ... -блоках есть какие-то вычислительные , я не хочу начинать выполнять их после того, как на все API-запросы будут получены ответы.

1 Ответ

2 голосов
/ 24 октября 2019

Но действительно ли prom1 разрешается только после выполнения .then () axios?

prom1 - это возвращаемое значение из вызова метода then(),так что да.

Причина, по которой .then () из Promise.all () всегда будет выполняться после axios.get (). then (), заключается в том, что они выполняются синхронно, и поэтому имеет значениекакой .then () вызывается первым?

Нет. Они выполняются асинхронно. Обещание, возвращаемое Promise.all(), не разрешается до тех пор, пока не будут разрешены все обещания в массиве, переданные ему. Порядок разрешения этих обещаний не имеет значения.

...