Почему обработка промиса через acync-await не выдаёт массив объектов как через обработку .then?
Начал изучать AJAX. Вопрос в следующем: почему через асинхронную функцию при декодирования нашего response мы получаем один объект { id: 101 } - и откуда он вообще читается? А при обработке через .then мы получаем полноценный массив объектов как с ссылки? Я ожидал, что асинхронная функцию также выдаст массив объектов с ссылки, но он выдаёт объект, который я понятия не имею откуда берет.
fetch же должен в обоих случаях работать одинаково? await просто ждёт завершения фукнции fetch и всё, ничего не добавляет. А сам fetch возвращает промис, который хранит одинаковый результат объекта Response в обоих случаях.
Обработка через .then:
const POSTS_URL = 'https://jsonplaceholder.typicode.com/posts';
const result = fetch(POSTS_URL, {
method: 'GET',
})
result
.then(response => response.json())
.then(result => console.log(result));
Через асинхронную функцию:
const POSTS_URL = 'https://jsonplaceholder.typicode.com/posts';
const createNewPost = async () => {
try {
isLoading = true;
const response = await fetch(POSTS_URL, {
method: 'POST',
})
if (!response.ok) {
throw new Error('Ошибка запроса');
}
const result = await response.json();
console.log('result', result);
} catch (error) {
console.log(error);
} finally {
isLoading = false;
}
};
createNewPost();
Ответы (1 шт):
В первом случае Вы запрашиваете публикации через GET, во втором случае Вы видимо добавляете новую публикацию, потому что POST. соответственно id: 101 - это типа код добавленного поста. Если Вам нужно получить список постов, замените POST на GET
const POSTS_URL = 'https://jsonplaceholder.typicode.com/posts';
const createNewPost = async () => {
try {
isLoading = true;
const response = await fetch(POSTS_URL, {
method: 'GET',
})
if (!response.ok) {
throw new Error('Ошибка запроса');
}
const result = await response.json();
console.log('result', result);
} catch (error) {
console.log(error);
} finally {
isLoading = false;
}
};
createNewPost();