• Что по итогу возвращают функция fetch() и метод json()?

    @anvaslist Автор вопроса
    Дмитрий Беляев, так если await вызывает метод then у того, что ему отдали, то then тоже возвращает промис, поэтому в переменную result тоже должен присвоиться промис по сути, а не Response, верно?
  • Что по итогу возвращают функция fetch() и метод json()?

    @anvaslist Автор вопроса
    Вадим, Вадим, я отходил более подробно вникнуть в async/await. В общем да, теперь я понял, что и fetch и json возвращают промисы, а ключевое слово await получает результат того промиса, который они возвращают (и кстати, спасибо за вашу мини-имплементацию fetch). Но вот одного я всё равно так и не понял: как именно await присваивает в переменную результат выполненного промиса? Вот смотрите, к примеру, await дожидается выполнения промиса, дождалось, то есть у нас есть зарезолвленный экземпляр объекта Promise. Но как именно у await получается вот так взять и достать результат этого зарезолвленного экземпляра и положить его в переменную? Ну я вот просто вообще не вижу здесь любого другого способа, как обратиться к свойству [[PromiseResult]] и взять значение этого свойства. Но оно же ведь недоступно?
  • Что по итогу возвращают функция fetch() и метод json()?

    @anvaslist Автор вопроса
    Вадим,
    await дожидается резолва промиса и возвращает именно данные, которыми промис зарезолвился

    Так, вооот, вот это уже другой разговор. Собственно, как вообще можно вернуть результат промиса? Мы же не можем получить доступ к его свойству [[PromiseResult]], в котором хранится тот объект Response? Ну имею ввиду, чтобы получить этот результат промиса и просвоить его в перменную result нашу.
    async function fn() {
      const result = await fetch('https://jsonplaceholder.typicode.com/users');
      const response = await result.json();
    }

    Получается в строке, где await result.json(), этот await возвращает в переменную response результат промиса тоже? Но все равно не пойму, каким именно образом мы можем вернуть результат промиса. Это как вообще? Нет же доступа к его результату (свойству Result)
  • Что по итогу возвращают функция fetch() и метод json()?

    @anvaslist Автор вопроса
    Когда этот запрос возвращает данные, то промис, который вернул fetch, резолвится по средствам вызова своей внутренней функцию resolve(), в аргумент которой передаёт специальный объект, у которого уже есть методы .json, .text и тд.

    Вот, промис рарезолвился с этим объектом Response, который пришел в качестве ответа от сервера. Но вот всё же:
    async function fn() {
      const result = await fetch('https://jsonplaceholder.typicode.com/users');
      const response = await result.json();
      console.log(response);
    }
    fn();

    Вы сами сказали, что fetch возвращает промис, соотвественно в переменную result у нас присваивается экземпляр Promise. Так как мы к этому промису применяем метод json, где result.json()? У промисов же нет этого метода. И потом, если json тоже возвращает промис, в переменную response должен прийти промис, но в консоль почему-то попадает уже массив. Почему?
    По поводу промисов, я их уже изучал, вплоть до того, что изучал их на примере различных имплементаций. Но все равно никак не могу понять...
  • Что по итогу возвращают функция fetch() и метод json()?

    @anvaslist Автор вопроса
    WbICHA, чейнить, вызывать метод then. Не совсем понимаю, к чему эта цепочка вопросов? Пока я ни к чему не пришел.
  • Что по итогу возвращают функция fetch() и метод json()?

    @anvaslist Автор вопроса
    json Вы применяете к данным, которые этот промис возвращает когда резолвится.

    Стоп, промис же ничего не возвращает? Он только резолвит себя и всё. Как этот объект (экземпляр объекта Promise) что-либо возвращает? Он же приписывает себе в [[PromiseResult]] то, что было передано в resolve(value) и всё?
  • Что по итогу возвращают функция fetch() и метод json()?

    @anvaslist Автор вопроса
    WbICHA, чтобы дождаться вопроса от сервера и зарезолвить промис этим ответом. Если по итогу будет всё равно промис, мы не можем применять к нему метод json, у промиса же нет такого метода?