Javascript Функция извлечения возвращает [объект Promise]
В настоящее время я работаю над проектом, который включает в себя веб-сайт, построенный и запущенный на Django. На этом сайте я пытаюсь загрузить данные через быстрый API и пытаюсь загрузить эти данные через JavaScript и Fetch API. Но я всегда получаю вместо данных, предоставляемых через API, [объект Promise]. Я пробовал много различных методов, но ни один из них не работает.
Любая помощь будет высоко оценена!
Я пробовал, например:
document.getElementById("1.1").innerHTML = fetch('the URL')
.then(response => response.text())
или
document.getElementById("1.1").innerHTML = fetch('the URL')
.then(response => response.text())
.then((response) => {
console.log(response)
})
и многие другие методы. Я также проверил, и запрос API работает отлично, возвращая строку.
Вы хотите, чтобы настройки html отображались при регистрации окончательного ответа, например:
fetch('the URL')
.then(response => response.text())
.then((response) => {
console.log(response)
document.getElementById("1.1").innerHTML = response
})
Другие способы, в том числе заставить выполнить все обещание ответа:
const getData = async (url) => {
const res = await fetch(url)
const resText = await res.text()
return resText
}
const addTextFromUrl = async (url, element) => {
const text = await getData(url)
element.innerHtml = text
}
addTextFromUrl('theUrl', document.getElementById("1.1"))
Обычно при обучении проще следовать синтаксису async/await, но вы всегда должны пытаться/ловить любые ошибки.
Каждый вызов .then
действительно возвращает новое обещание. Таким образом
Вам необходимо присвоить значение в обратном вызове или использовать async/await
fetch('the URL')
.then(response => response.text())
.then((response) => {
document.getElementById("1.1").innerHTML = response
})
или сделать это внутри асинхронной функции
async function getHtml() {
document.getElementById("1.1").innerHTML = await fetch('the URL')
.then(response => response.text())
}
getHtml();
В/о использование then
async function getHtml() {
const response = await fetch('the URL');
const html - await response.text();
document.getElementById("1.1").innerHTML = html;
}
getHtml();
fetch()
возвращает объект Promise
со значением response.text()
внутри него. Именно поэтому [object Promise]
печатается console.log
. Объект Promise
может быть развернут с помощью await
, что позволяет присвоить внутреннее значение:
document.getElementById("1.1").innerHTML = await fetch('the URL')
.then(response => response.text())
})
Для обработки ошибок обратите внимание на .catch(), которые могут быть соединены в цепочку .then()
.