#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)
})