Как связать несколько вызовов Axios вместе, чтобы они выполнялись синхронно, и каждый вызов может использовать данные, возвращенные предыдущим вызовом - PullRequest
0 голосов
/ 20 июня 2019

У меня есть массив элементов, и мне нужно сделать сообщение Axios для каждого элемента в массиве. Каждый элемент зависит от данных, возвращаемых из предыдущего элемента, поэтому мне нужно, чтобы они выполнялись синхронно. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, сколько элементов будет в массиве. Если бы я знал количество массивов, я мог бы сделать следующее:

let my_array = [34, 44, 72];

axios.post(
    'url-to-get-data',
    {
        post_data_1: my_array[0]
    }
    ).then(res => {
        axios.post(
            'url-to-get-data',
            {
                post_data_1: my_array[1],
                post_data_2: res.data
            }
            ).then(res => {
                 //Third axios post.....
            }
            ).catch();
        }
        ).catch();

Кто-нибудь знает, как мне этого добиться?

1 Ответ

2 голосов
/ 20 июня 2019

По сути, вы спрашиваете, как связать (неизвестную длину) асинхронную работу.

Использование обещаний (и рекурсии):

let asyncDec = count => Promise.resolve(count - 1);

let handler = count => {
  console.log('handled', count);
  if (count)
    return asyncDec(count).then(handler)
};

asyncDec(10).then(handler);

Использование await / async:

let asyncDec = async count => count - 1;

let main = async () => {
  let count = 10;
  while (count >= 0) {
    console.log('handled', count)
    count = await asyncDec(count);
  }
};
main();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...