Как заставить HTTP-запрос вернуть ответ в маршруте - PullRequest
1 голос
/ 26 апреля 2020

У меня есть маршрут, по которому я хочу взять предоставленные ему данные и отправить его в запросе http и вернуть ответ по моему маршруту. Что я сделал, так это то, что у меня есть эта функция вызова, которая отправляет http-запрос и возвращает ответ

async function call() {
    axios
    .post("https://jsonplaceholder.typicode.com/posts", {
      title: "foo",
      body: "bar",
      userId: 1,
    })
    .then((res) => {
      return { answer: 30 };
    })
    .catch((error) => {
      console.error(error);
    });
}

Я пытался вызвать его по маршруту, но он не ждет завершения http-запроса sh.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Если вы пытаетесь получить вызывающего абонента call(), чтобы иметь возможность ждать результатов вашего топора ios, то вам нужно сделать две вещи:

  1. Вам необходимо вернуть обещание от axios.post()
  2. Ваш абонент должен использовать .then() или await в этом возвращенном обещании.
  3. Не есть ошибки в вашем .catch(). Если вы .catch() просто для того, чтобы вы могли войти в систему и по-прежнему хотите, чтобы отклонение было возвращено вызывающей стороне, вы должны сбросить ошибку. В этом случае кажется, что вызывающий должен поймать и записать ошибку.

Вот код для выполнения этих действий:

function call() {
    return axios.post("https://jsonplaceholder.typicode.com/posts", {
      title: "foo",
      body: "bar",
      userId: 1,
    }).then((res) => {
      return { answer: 30 };
    });
}

call().then(result => {
    console.log(result);
}).catch(err => {
    console.log(err);
});

Кроме того, не было никакой причины использовать async здесь. async не обладает магическими способностями c, чтобы знать, когда выполняется асинхронная операция внутри функции. Вы все еще должны вернуть обещание или использовать await для каждого обещания. В этом случае, поскольку вы не использовали await, нет смысла использовать async, поэтому я удалил его, поскольку вы можете просто вернуть одно обещание, которое у вас есть.

0 голосов
/ 26 апреля 2020

Мне больше нравится ответ @ jfriend00, но вот тот, который использует async / await

async function over() {
  async function call() {
    return await axios
      .post('https://jsonplaceholder.typicode.com/posts', {
        title: 'foo',
        body: 'bar',
        userId: 1,
      })
      .then((res) => {
        return { answer: 30 };
      })
      .catch((error) => {
        console.error(error);
      });
  }

  let result = await call();
  console.log(result);
}

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