diff --git a/js/async-in-js/index.md b/js/async-in-js/index.md index 1fbb39fd1c..693db4d4fa 100644 --- a/js/async-in-js/index.md +++ b/js/async-in-js/index.md @@ -410,7 +410,9 @@ request('/api/users/1', function (user) { **[Промис](/js/promise/)** — это объект-обёртка для асинхронного кода. Он содержит в себе состояние: вначале `pending` («ожидание»), затем — одно из: `fulfilled` («выполнено успешно») или `rejected` («выполнено с ошибкой»). -В понятиях цикла событий промис работает так же, как колбэк: функция, которая должна выполниться (`resolve` или `reject`), находится в окружении Web API, а при наступлении события — попадает в очередь задач, откуда потом — в стек вызова. +В модели цикла событий Promise сам по себе не выполняет асинхронный код. +Асинхронные операции (например, таймеры или сетевые запросы) выполняются во внешней среде (Web API или libuv). +Когда такая операция завершается, вызывается `resolve` или `reject`, которые изменяют состояние Promise и планируют выполнение обработчиков `.then`, `.catch` и `.finally` в очереди микрозадач (microtask queue). В асинхронных задачах есть [разделение между макрозадачами и микрозадачами](https://medium.com/javascript-in-plain-english/javascript-event-loop-y-promises-951ba6845899). Колбэки в промисах попадают в очередь микрозадач, тогда как колбэк в `setTimeout()` — в очередь макрозадач. Но здесь и сейчас мы в такие детали уходить не будем.