Всем привет.
1) Есть следующий код, в консоль выводится экземпляр Промиса:
function fn() {
const result = fetch('https://jsonplaceholder.typicode.com/users');
console.log(result);
}
fn();
2) Второй вариант кода (добавил async/await), в консоль уже выводится экземпляр объекта Response:
async function fn() {
const result = await fetch('https://jsonplaceholder.typicode.com/users');
console.log(result);
}
fn();
3) Третий вариант:
async function fn() {
const result = await fetch('https://jsonplaceholder.typicode.com/users');
return result;
}
console.log(fn());
Здесь я уже не вывожу в консоль result, а возвращаю из ф-ии, вот при таком коде снова выводится экземпляр Промиса, у которого [[PromiseResult]] - экземпляр Response. И это при малейших изменениях кода. Отсюда вопрос, так что в конечном итоге возвращает fetch? Экземпляр Response или Promise?
4) Также к результату работы fetch применяется метод json, в консоли Промис:
async function fn() {
const result = await fetch('https://jsonplaceholder.typicode.com/users');
const response = result.json();
console.log(response);
}
fn();
5) А если сделаю вот так (добавил await перед result.json()), то в консоли уже ожидаемый массив:
async function fn() {
const result = await fetch('https://jsonplaceholder.typicode.com/users');
const response = await result.json();
console.log(response);
}
fn();
6) И последний пример. Если опять не вывести в консоль, а вернуть переменную из ф-ии, то снова Промис:
async function fn() {
const result = await fetch('https://jsonplaceholder.typicode.com/users');
const response = await result.json();
return response;
}
console.log(fn());
После прочтения статей и просмотра туториалов, у меня всё равно остался вопрос: что в итоге возвращают функция fetch и метод json? Если fetch возвращает Промис, то как мы тогда к нему применяем метод json? У Промиса же нет этого метода. В общем, спасибо за уделённое время на прочтение вопроса. Буду премного благодарен, если есть возможность объяснить своими словами, я сам ужасно запутался...