РАБОТАЛИ ЛИ ВЫ PROMISES В JAVASCRIPT? РАССКАЖИТЕ В ЧЕМ ИХ СУТЬ: ЗАЧЕМ ИХ ПРИДУМАЛИ, КАКОВ ИХ ПРИНЦИП РАБОТЫ?
Для того, чтобы реализовать асинхронность в JavaScript, необходимо использовать ф-и обратного вызова (callback). Это ф-и, которая вызывается при завершении выполнения какого-то события. Типичный пример setTimeout - по истечении какого-то времени будет вызван callback. В связи с этим подходом, возникла новая проблема - это сильная вложенность callback, которую еще называют "callbach hell". В чем проблема данной вложенности - так как это усложнение читабельности, дебага, производительности
, разработки.
Для решение такой проблемы, были разработаны так называемые промиссы (Promises).
Promises, в отличии от callback, не являются ф-иями, это объекты, которые хранят в себе информацию, произошли ли определенные события или нет, а если произошли — то и их результат. изменениями promises.
Так же, в отличии от callback, он сами по себе ничего не возвращают, это обработчики resolve, reject уже возвращает результат какой-то.
Сами promises могут быть вызваны только в асинхронных ф-ях, которые обновляют promise, после того как произошло какое-то событие.
:star: Если глянуть под капотом, то Promises работают след. образов. Когда вызывается new Promise(function(resolve, reject) {}), то создается экземпляр класса Promise, в конструктор которого мы передаем аргумент в виде ф-и, которую будет ожидать Promise. Для того, чтобы обрабатывать завершение события, в ф-ю передаются аргументы resolve, reject, которые тоже являются функциями. Вызов resolve(value) пометит обещание как успешно завершенное и вызовет обработчик успешного завершения. Вызов reject(error) вызовет обработчик неуспешного завершения. Нельзя вызывать обе эти функции одновременно. Функции resolve и reject обе принимают один аргумент, который содержит в себе данные о событии
А ЧТО БУДЕТ С КОНТЕКСТОМ THIS У ОБЪЕКТА, ЕСЛИ МЫ ИСПОЛЬЗУЕМ NEW OBJECT() ?
При использовании new, у нового объекта контекст this будет пустым, потому что оборвется связь с контекстом объекта, из которого он был вызван
-
-