Предположим, что запрос fetch
выполняется за 2 мс. Программа продолжает работать. Затем, через 100 мс, запрос был выполнен, но программа еще не завершила свое выполнение.
1. На этом этапе браузер действительно обновляет значение в Promise
объект, даже если программа еще не завершена, или это нужно сделать в потоке Javascript, когда стек вызовов пуст?
2. Каким образом обратные вызовы onFulfilled
и onRejected
помещаются в очередь заданий? Насколько я знаю, они делают это при изменении состояния обещания, но как именно это делается? Наблюдает ли браузер за кулисами за изменениями в объекте и немедленно ставит в очередь обратный вызов, или это Javascript делает это после завершения выполнения синхронного кода?
EDIT: В ходе курса мне сказали, что, грубо говоря, под капотом происходило то, что свойство «value» объекта Promise
обновлялось, как только запрос был успешно выполнен (даже если программа все еще работала), и немедленно вызвало две вещи: изменение состояния Promise
и обратный вызов в массиве onFulfillment
, который будет помещен в очередь микрозадач (при условии, что он был добавлен с использованием then
). Это возможно? Изменяется ли объект Promise
за пределами Javascript, или это происходит, когда программа завершает свое выполнение? Пожалуйста, поправьте меня, если я ошибаюсь.