Топор ios обещание не разрешается, всегда в ожидании - PullRequest
0 голосов
/ 04 мая 2020

Я не уверен, но я не могу заставить себя решить эту проблему. его всегда в ожидании. Я не лучший с обещаниями, поэтому, пожалуйста, помогите мне.

export async function getQuotes() {
  const options = {
    headers: {
      "x-rapidapi-host": API_URL,
      "x-rapidapi-key": API_KEY,
      "content-type": "application/x-www-form-urlencoded",
    },
  };

  let res = await axios
    .post(API_URL, {}, options)
    .then(function (response) {
      console.log(response);
    })
    .catch(function (error) {
      console.log(error);
    });

  return res;
}

и вот как я его называю:

const new_data = dataApi.getQuotes();
console.log(new_data);

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

Ответы [ 3 ]

1 голос
/ 04 мая 2020

В javascript функции asyn c возвращают обещание, которое разрешается до их возвращаемого значения. Чтобы получить доступ к данным, вам нужно обернуть их в другую асинхронную функцию c и вызвать ожидание или использовать .then:

// Either:
async function main() {
    const new_data = await dataApi.getQuotes();
    console.log(new_data);
}
// or
dataApi.getQuotes().then(new_data => console.log(new_data));

Подробнее здесь .

0 голосов
/ 04 мая 2020

Вы должны использовать async / await или обещания (.then и .catch) - но не оба одновременно. Вы также должны знать, что функция asyn c всегда возвращает Promise, поэтому вы можете использовать ее с синтаксисом then / catch, если хотите.

// Call with the then/catch syntax
dataApi.getQuotes()
   .then((data) => console.log(data))
   .catch((err) => console.error(err))

// Is the same that this call with async await
async function main() {
  try {
    const data = await dataApi.getQuotes();
    console.log(data)
  } catch (err) {
    console.error(err)
  }
}

Что касается вашей функции, вы используете async / жди здесь Так что вы не можете использовать затем / catch, но ждите в своем теле.

export async function getQuotes() {
  const options = {
    headers: {
      "x-rapidapi-host": API_URL,
      "x-rapidapi-key": API_KEY,
      "content-type": "application/x-www-form-urlencoded",
    },
  };

  try {
     let res = await axios.post(API_URL, {}, options);
     console.log(response);
   catch (error) {
      console.log(error);
   }

  return res;
}
0 голосов
/ 04 мая 2020

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

dataApi.getQuotes()
    .then(function(new_data) {
        console.log(new_data);
    })
    .catch(function (error) {
       // error handling
    });
...