Проблема с асинхронными / ожидающими и http-запросами клиентов - PullRequest
0 голосов
/ 23 октября 2018

Не уверен, что мне здесь не хватает, но в строке console.log () вместо ответа в теле JSON из ответа выводится «Promise {}».
Мне кажется, что я что-то не так делаю с async / await.

Мой код (Экспресс):

async function axiosPost(url, payload) {
   try {
      const res = await axios.post(url, payload);
      const data = await res.data;
      return data;
  } catch (error) {
      console.error(error);
  }
}

app.get('/data', (req, res) => {
    data = axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     });
     console.log(data)
     res.status(200).send({
        message: data
    })
});

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы получите этот результат, потому что вы не разрешили вызов на axiosPost(), который является асинхронным.Эту проблему можно решить двумя способами: один добавив .then() к вызову axiosPost() или просто ожидая его с помощью ключевого слова await.Смотрите ниже:

async function axiosPost(url, payload) {
   try {
      const res = await axios.post(url, payload);
      const data = await res.data; // this is not required but you can leave as is
      return data;
  } catch (error) {
      console.error(error);
  }
}

// I converted the callback to an async function and
// also awaited the result from the call to axiosPost(),
// since that is an async function
app.get('/data', async (req, res) => {
    data = await axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     });
     console.log(data)
     res.status(200).send({
        message: data
    })
});

// OR using `then()`

app.get('/data', (req, res) => {
    axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     }).then((data) => {
      console.log(data);
      
      res.status(200).send({
        message: data
      });
    });
})
0 голосов
/ 23 октября 2018

замените ваш роутер этим.вы не использовали await во время вызова API.Надеюсь, это поможет.

app.get('/data', async (req, res) => {
    let data = await axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     });
     console.log(data)
     res.status(200).send({
        message: data
    })
});
...