Задать вопрос
Kozack
@Kozack
Thinking about a11y

Правильно ли я понимаю асинхронные сетевые запросы?

const promise = getResource() // Обращение к серверу которое занимает ровно одну секунду

// Синхронные операции на выполнение которых уходит ровно одна секунда

await promise // На данный момент сетевой запрос уже выполнен, И просто ожидает пока я его "запрошу"?
  • Вопрос задан
  • 246 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Нет, не совсем так.

// getResource() это должна быть некая функчия, которая делает асинхронный запрос к серверу и возвращает thenable объект:
// раз - https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve
// два - https://ru.stackoverflow.com/questions/877248/%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-thenable-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82


// тут мы запрашиваем обращаемся к серверу, при этом запрос может быть выполнен как очень быстро так и очень медленно а так же он может быть вообще не выполнен (зависит от загруженности сети, состояния и загруженности сервера)
const promise = getResource()

// тут мы конечно можем делать синхронные операции,но так как они синхронные,  то пока они не отработают выполнение кода дальше не двинется.

// тут мы просто говорим, что ждем пока сделанный запрос на сервер не вернет данные  код, находящийся далее не исполнять. Начнет его исполнять только после получения данных, сколько бы запрос к серверу не длился (в разумных пределах конечно. Существуют различные таймауты на установку соединения, на ожидание ответа и т.д.). При этом пока исполнение кода в данном блоке находится как бы на паузе, интерпретатор может выполнять другие задачи имеющиеся в eventloop. Таким образом достигается стиль написания кода, похожий на синхронный но являющийся асинхронным.
await promise
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы