Корректирует описание поведения промиса в модели Event loop в статье Асинхронность#5957
Open
altynaymm wants to merge 1 commit intodoka-guide:mainfrom
Open
Корректирует описание поведения промиса в модели Event loop в статье Асинхронность#5957altynaymm wants to merge 1 commit intodoka-guide:mainfrom
Асинхронность#5957altynaymm wants to merge 1 commit intodoka-guide:mainfrom
Conversation
текущая формулировка может ввести в заблуждение относительно работы Promise в цикле событий: создаётся впечатление, что resolve / reject являются частью web api и попадают в очередь задач так же, как setTimeout. На практике асинхронность обеспечивается внешними API (таймеры, I/O и т.п.), а Promise лишь реагирует на их завершение. Вызовы resolve / reject не являются макрозадачами и не попадают в очередь задач напрямую — они изменяют состояние Promise и планируют выполнение обработчиков .then / .catch в очереди микрозадач. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Execution_model https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
Превью контента из опубликовано. |
Асинхронность
vitya-ne
reviewed
Feb 3, 2026
|
|
||
| В понятиях цикла событий промис работает так же, как колбэк: функция, которая должна выполниться (`resolve` или `reject`), находится в окружении Web API, а при наступлении события — попадает в очередь задач, откуда потом — в стек вызова. | ||
| В модели цикла событий Promise сам по себе не выполняет асинхронный код. | ||
| Асинхронные операции (например, таймеры или сетевые запросы) выполняются во внешней среде (Web API или libuv). |
Contributor
There was a problem hiding this comment.
Web API или libuv
Я бы добавил некоторое пояснение что такое libuv или не упоминал её тут.
Выше в статье есть описание Web API, но про "внебраузерное" выполнение не говорится.
Suggested change
| Асинхронные операции (например, таймеры или сетевые запросы) выполняются во внешней среде (Web API или libuv). | |
| В браузере асинхронные операции (например, таймеры или сетевые запросы) выполняются в окружении Web API. |
vitya-ne
reviewed
Feb 3, 2026
| В понятиях цикла событий промис работает так же, как колбэк: функция, которая должна выполниться (`resolve` или `reject`), находится в окружении Web API, а при наступлении события — попадает в очередь задач, откуда потом — в стек вызова. | ||
| В модели цикла событий Promise сам по себе не выполняет асинхронный код. | ||
| Асинхронные операции (например, таймеры или сетевые запросы) выполняются во внешней среде (Web API или libuv). | ||
| Когда такая операция завершается, вызывается `resolve` или `reject`, которые изменяют состояние Promise и планируют выполнение обработчиков `.then`, `.catch` и `.finally` в очереди микрозадач (microtask queue). |
Contributor
There was a problem hiding this comment.
вызывается
resolveилиreject, которые изменяют состояние Promise и планируют выполнение обработчиков
Конечно это тонкости, но может сложится впечатление, что:
- Promise.resolve() что-то "планирует";
- при переходе примиса в fulfilled состояние в очередь микрозадач попадут колбэки из '.catch()'.
vitya-ne
reviewed
Feb 3, 2026
Contributor
vitya-ne
left a comment
There was a problem hiding this comment.
Привет,
спасибо за внимательность и правку.
Я оставил пару субъективных коментов. Буду рад поспорить и оказаться неправым )
ra1nbow1
reviewed
Feb 16, 2026
| **[Промис](/js/promise/)** — это объект-обёртка для асинхронного кода. Он содержит в себе состояние: вначале `pending` («ожидание»), затем — одно из: `fulfilled` («выполнено успешно») или `rejected` («выполнено с ошибкой»). | ||
|
|
||
| В понятиях цикла событий промис работает так же, как колбэк: функция, которая должна выполниться (`resolve` или `reject`), находится в окружении Web API, а при наступлении события — попадает в очередь задач, откуда потом — в стек вызова. | ||
| В модели цикла событий Promise сам по себе не выполняет асинхронный код. |
Member
There was a problem hiding this comment.
Давай может либо везде Promise писать, либо Промис? Чтобы согласованно смотрелось
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
текущая формулировка может ввести в заблуждение относительно работы Promise в цикле событий: создаётся впечатление, что resolve / reject являются частью web api и попадают в очередь задач так же, как setTimeout. На практике асинхронность обеспечивается внешними API (таймеры, I/O и т.п.), а Promise лишь реагирует на их завершение. Вызовы resolve / reject не являются макрозадачами и не попадают в очередь задач напрямую: они изменяют состояние Promise и планируют выполнение обработчиков .then / .catch в очереди микрозадач.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Execution_model
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
Превью: https://content-5957.dev.doka.guide/js/async-in-js/