Page 229 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 229
Но не тут-то было. Г е нераторы сами по себе не обеспечивают никакой асинхронной
поддержки: для обеспечения асинхронного поведения они полагаются либо на обя
зательства (в русскоязычной документации MDN они названы обещаниями), либо
на специальный тип функций обратного вызова. Аналогично обязательства сами
по себе столь же полезны, но они полагаются на обратные вызовы (а обратные вы
зовы сами по себе очень пригодятся для таких вещей, как обработка событий).
Кроме пользовательского ввода, вы будете использовать асинхронные методики
в следующих трех областях.
• Сетевые запросы (например, вызов Ajax).
• Операции с файловой системой (чтение, запись в файлы и т.д.).
• Преднамеренно отсроченные функциональные возможности (например, опо
вещение).
r
Анало ия
Аналогия, которую мне нравится использовать для функций обратных вызовов
и обязательств, - это попытка заполучить столик в занятом ресторане, когда вы за
ранее не зарезервировали себе место. Таким образом, вы не должны ждать своей
очереди (в некоторых ресторанах могут взять номер вашего мобильного телефона
и перезвонить, когда столик освободится). Это похоже на функцию обратного вызо
ва: вы предоставили менеджеру ресторана нечто, что позволит ему сообщить, когда
ваш столик освободится. Ресторан занят своими делами, и вы можете заниматься
своими; никто никого не ждет. В другом ресторане вам могут предоставить пейджер,
который сработает, когда столик будет свободен. Это больше похоже на обязатель
ство: нечто, что менеджер ресторана дает вам, и что сообщит, когда столик будет
свободен.
Не забывайте эти аналогии, когда мы будем рассматривать обратные вызовы
и обязательства, особенно если вы новичок в асинхронном программировании.
Обратн е вызовы
ы
Обратный вызов (callback) - самый старый асинхронный механизм в JavaScript,
и мы уже встречали его при обработке пользовательского ввода и запуска программ
через заданные интервалы времени. Обратный вызов - это просто функция, кото
рую вы пишете и которая будет вызвана в некий момент времени в будущем. В са
мой функции нет ничего особенного: это обычная функция JavaScript. Как правило,
вы предоставляете функции обратного вызова другим функциям или устанавливаете
их как свойства объектов (или, хотя и редко, сохраняете их в массиве). Обратные вы
зовы (часто, но не всегда) являются анонимными функциями.
232 Глава 14. Асинхронное п р ограммирование

