Задать вопрос
@ITemka

Могу задать несколько вопросов по технологии отправки/получения информации с сервера (fetch)?

Я изучаю JavaScript. Столкнулся с темой запросов на сервер с помощью технологии fetch. Очень много пытался разобраться, но в итоге я скорее просто заучил, как все работает, а понимания у меня нет. Поэтому прошу ответить на несколько вопросов. Человеку, который в этом разбирается, делать нечего на них ответить, я и сам вижу, что они не сложные. Но ответить на них сам я не могу, тем не менее.

1. Если:
1) Просто вызвать fetch и аргументом передать ссылку;
То:
Выдастся Promise без нужного нам ответа от сервера.

2. Если:
1) Вызвать fetch и аргументом передать ссылку;
2) Вызвать метод then и передать в качестве аргумента колбэк-функцию, а в ней самой написать response.json() и вернуть это
То:
Выдастся Promise с нужным нам ответом от сервера, который будет находится во вложенном объекте PromiseResult.

3. Если:
1) Вызвать fetch и аргументом передать ссылку;
2) Вызвать метод then и передать в качестве аргумента колбэк-функцию, а в ней написать response.json() и вернуть это;
3) Вызвать ещё метод then и там написать console.log(json) и вернуть это (не важно, можно даже не возвращать, а просто написать console.log());
То:
Выдастся Promise с уже пустым объектом PromiseResult и отдельно уже с чистым нужным нам объектом, который раньше был как раз-таки в том самом объекте PromiseResult.

1) Почему здесь не играет роли - возвращать console.log(json) или нет. Ведь и в том и другом случае нам вернётся чистый нужный нам объект с нужной нам информацией.
2) Почему, чистый нужный нам объект с нужной нам информацией отдельно возвращается только тогда, когда пишется console.log(json). И именно после того, как чистый нужный нам объект с нужной нам информацией отдельно возвращается, объект PromiseResult становится пустым. Почему в нем по-прежнему не остаётся чистого нужного нам объекта с нужной нам информацией? Как console.log(json) так сильно влияет на это?

При использовании, fetch автоматически создаёт промис. Но как он это делает? Вот так?
const fetch = new Promise("")
Или он работает как-то по-другому?

Говорится, что метод .json() позволяет конвертировать промис в JSON-формат. Но я не вижу разницы между тем, чтобы просто вызвать fetch и аргументом передать ссылку, и тем, чтобы вызвать fetch и аргументом передать ссылку, вызвать метод then и передать в качестве аргумента колбэк-функцию, а в ней написать response.json() и вернуть это, вызвать ещё метод then и там написать console.log(json). Потому что и там и там все во вполне понятном и читабельном формате объекта.

Также хочу поддерживать связь со знающим человеком, чтобы если что ещё о чем-то спросить. Поэтому оставьте свои контакты (соцсеть), если можно.

Заранее спасибо!
  • Вопрос задан
  • 187 просмотров
Подписаться 2 Простой 1 комментарий
Ответ пользователя wonderingpeanut К ответам на вопрос (3)
@wonderingpeanut
1) console.log() возвращает undefined. Если функция ничего не возвращает явно, то неявно возвращается undefined. Поэтому нет разницы, возвращать console.log(json) или нет.
2) Не совсем понял. Имеешь в виду это?

// const a не содержит result в PromiseResult
const a = promise().then((result) => {
  console.log(result)
})
// const b содержит result в PromiseResult
const b = promise().then((result) => {
  return result;
})

Насчет фетча, фетч реализован с помощью конструктора XMLHttpRequest.
const fetch = (url) => new Promise((resolve, reject) => {
  // тут создается новый инстанс XMLHttpRequest и через него происходит запрос на сервер
  // подробнее тут https://developer.mozilla.org/ru/docs/Web/Guide/AJAX/Getting_Started
  // пример реализации fetch можно посмотреть здесь https://github.com/github/fetch/blob/master/fetch.js#L506
})
Ответ написан