раньше я получал котировки из котировок api с помощью метода выборки, но результатов не нашел

#javascript #api #get #fetch #quotes

Вопрос:

У меня есть функция для получения случайной цитаты из API.цитаты помогают мне избежать результата undefined

 function getQuote() {
  return fetch('https://type.fit/api/quotes').then(response => {
    return response.json()
  }).then(jsonResponse => {
    if (!jsonResponse.length) {
      return []
    }
    return jsonResponse[Math.floor(Math.random() * jsonResponse.length)]
  })
}
const textQuote = getQuote().text;
const authorQuote = getQuote().author; 

Ответ №1:

Я думаю, что это сводится к лучшему пониманию обещаний. getQuote вернет обещание, потому что fetch вернет обещание. Затем вы можете использовать .then() цепочку для получения результата вашей функции, которая является вашим объектом цитаты.

Также

 const textQuote = getQuote().text;
const authorQuote = getQuote().author;
 

не сработает, потому что вы вызываете метод дважды (что, если бы это сработало, означало бы, что вы получите 2 разных кавычки, которые не будут совпадать).

В приведенном ниже примере вы можете видеть, что getQuote это вызывается только один раз, а затем связывается с a .then для обработки результата.

 function getQuote() {
  return fetch('https://type.fit/api/quotes').then(response => {
    return response.json()
  }).then(jsonResponse => {
    if (!jsonResponse.length) {
      return []
    }
    return jsonResponse[Math.floor(Math.random() * jsonResponse.length)]
  })
}

getQuote().then(quote => {
  const text = quote.text;
  const author = quote.author;
  console.log(text, author)
}) 

Ответ №2:

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

  const getQuote = async function()  {
let response = await fetch('https://type.fit/api/quotes',{method: 'GET'});
let quotes = await response.json();
console.log(quotes)
let indexQuote = Math.floor(Math.random() * quotes.length);
let quote = quotes[indexQuote];
console.log(quote)
return {
   text: quote.text;
   author: quote.author
}
  
 }
 const quote1 = getQuote().then((quote) => {console.log(quote)}).catch((error)=> {
    console.log(error)
 })