как соответственно вызывать семь API-интерфейсов в реакции с использованием Axios - PullRequest
0 голосов
/ 06 февраля 2019

Я попытался найти способ вызова нескольких API.потому что все мои семь API (ов) должны иметь доступ к одному и тому же файлу.поэтому он не может вызывать одновременно.

Я пытался обещать .all (), но он не работает.

Я пытался axios.then (axios.get (что-то).then)) (axios.get ( "что-то"), а затем ().);это также не работает.

let requests = [];
requests.push(axios.post(endpoint, data));
requests.push(axios.get(`http://localhost:8080/uploadpersonfile`));
requests.push(axios.get(`http://localhost:8080/uploadcedatafile`));
requests.push(axios.get(`http://localhost:8080/uploadforenseqfile`));
requests.push(axios.get(`http://localhost:8080/uploadforenseqxfile`));
requests.push(axios.get(`http://localhost:8080/uploadforenseqyfile`));
requests.push(axios.get(`http://localhost:8080/uploadisnpsfile`));
Promise.all(requests);

это еще одна попытка.

axios
.post(endpoint, data)
.then(res => {
        console.log(res)
      }).then(
      axios.get(`http://localhost:8080/uploadpersonfile`)
      .then(res => {
        console.log(res)
      })).then(
      axios.get(`http://localhost:8080/uploadcedatafile`)
      .then(res => {
        console.log(res)
      })).then(
      axios.get(`http://localhost:8080/uploadforenseqfile`)
      .then(res => {
        console.log(res)
      })).then(
      axios.get(`http://localhost:8080/uploadforenseqxfile`)
      .then(res => {
        console.log(res)
      })).then(
      axios.get(`http://localhost:8080/uploadforenseqyfile`)
      .then(res => {
        console.log(res)
      })).then(
      axios.get(`http://localhost:8080/uploadisnpsfile`)
      .then(res => {
        console.log(res)
      }))

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Promise.all ожидает только несколько обещаний.Неважно, в каком порядке они решают или вычисления выполняются параллельно.

К вашему слову respectively Я предполагаю, что вы хотите выполнять apis один за другим, а не параллельно

Вы можете попробовать следующее:

const executeApis = async() => {
  const res1 = await axios.post(endpoint, data);
  const res2 = await axios.get(`http://localhost:8080/uploadpersonfile`);
  // other api hits 
}
0 голосов
/ 06 февраля 2019

в вашем первом примере Promise.all(requests) возвращает объект Promise, вы не разрешаете его.

попробуйте это

Promise.all(requests).then(function(res) {
 console.log(response);
}).catch(function(err) {
  console.error(err);
})
0 голосов
/ 06 февраля 2019

Как указано в документации, Promise.all примет массив обещаний.Вам не нужно await их, но вам нужно await самой функции:

const results = await Promise.all(
    axios.post(endpoint, data),
    axios.get(`http://localhost:8080/uploadpersonfile`),
    axios.get(`http://localhost:8080/uploadcedatafile`),
    axios.get(`http://localhost:8080/uploadforenseqfile`),
    axios.get(`http://localhost:8080/uploadforenseqxfile`),
    axios.get(`http://localhost:8080/uploadforenseqyfile`),
    axios.get(`http://localhost:8080/uploadisnpsfile`)
);

Теперь вы можете получить доступ к результатам ваших запросов в results[<promise number>].Использование Promise.all выполнит все ваши запросы одновременно, сохраняя их в порядке, улучшая производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...