HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Остановимся чуть подробнее на возврате значений из асинхронных функций. В прошлом уроке мы выяснили, что асинхронные функции никогда не возвращают результат асинхронной операции:</p>
1 <p>Остановимся чуть подробнее на возврате значений из асинхронных функций. В прошлом уроке мы выяснили, что асинхронные функции никогда не возвращают результат асинхронной операции:</p>
2 <p>И единственный способ получить результат - описать логику в колбеке. Тогда возникает вопрос: а что, если сделать return внутри колбека? К чему это приведёт?</p>
2 <p>И единственный способ получить результат - описать логику в колбеке. Тогда возникает вопрос: а что, если сделать return внутри колбека? К чему это приведёт?</p>
3 <p>В результате ничего не меняется, так как этот возврат никем не используется. Это не означает, что сама инструкция return бесполезна в асинхронном коде. Напротив, она часто бывает полезна, но лишь как способ прервать выполнение кода, а не вернуть результат.</p>
3 <p>В результате ничего не меняется, так как этот возврат никем не используется. Это не означает, что сама инструкция return бесполезна в асинхронном коде. Напротив, она часто бывает полезна, но лишь как способ прервать выполнение кода, а не вернуть результат.</p>
4 <p>Этот паттерн называется<a>guard expression</a>.</p>
4 <p>Этот паттерн называется<a>guard expression</a>.</p>
5 <p>Всё то же самое распространяется и на асинхронные функции, которые мы пишем сами. Асинхронной является любая функция, внутри которой есть хоть одна асинхронная операция. Без исключения. Даже если помимо асинхронной операции, она выполняет и синхронные, например, производит манипуляции с текстом. В свою очередь, каждая асинхронная функция обязана принимать на вход колбек, так как это единственный способ упорядочивать события и отслеживать завершение.</p>
5 <p>Всё то же самое распространяется и на асинхронные функции, которые мы пишем сами. Асинхронной является любая функция, внутри которой есть хоть одна асинхронная операция. Без исключения. Даже если помимо асинхронной операции, она выполняет и синхронные, например, производит манипуляции с текстом. В свою очередь, каждая асинхронная функция обязана принимать на вход колбек, так как это единственный способ упорядочивать события и отслеживать завершение.</p>
6 <p>Напишем асинхронную функцию-обёртку для чтения файла, которая, кроме самого чтения, выполняет небольшую чистку, удаляя начальные и концевые пробелы из содержимого. Сразу вспоминаем, что, раз наша функция асинхронная, то она обязана принимать на вход функцию-колбек, которая будет вызвана по окончании операции. Эта функция должна иметь общепринятую сигнатуру, то есть принимать первым параметром ошибку и вторым - сами данные. Возврата данных через return в нашей асинхронной функции быть не может.</p>
6 <p>Напишем асинхронную функцию-обёртку для чтения файла, которая, кроме самого чтения, выполняет небольшую чистку, удаляя начальные и концевые пробелы из содержимого. Сразу вспоминаем, что, раз наша функция асинхронная, то она обязана принимать на вход функцию-колбек, которая будет вызвана по окончании операции. Эта функция должна иметь общепринятую сигнатуру, то есть принимать первым параметром ошибку и вторым - сами данные. Возврата данных через return в нашей асинхронной функции быть не может.</p>
7 <p>Этот процесс рекурсивен по своей природе, любая функция, которая внутри работает с асинхронной функцией, становится асинхронной и начинает принимать на вход колбек. Почему так происходит? Почему нельзя просто выполнить асинхронную операцию внутри, никак не сообщая об этом наружу? Дело в том, что в такой ситуации вы не можете ни воспользоваться результатом работы асинхронной функции (ведь данные приходят в колбек в другом стеке вызовов), ни узнать о том, закончилась ли операция вообще и закончилась ли она успешно. Всё это рассмотрим в следующих уроках.</p>
7 <p>Этот процесс рекурсивен по своей природе, любая функция, которая внутри работает с асинхронной функцией, становится асинхронной и начинает принимать на вход колбек. Почему так происходит? Почему нельзя просто выполнить асинхронную операцию внутри, никак не сообщая об этом наружу? Дело в том, что в такой ситуации вы не можете ни воспользоваться результатом работы асинхронной функции (ведь данные приходят в колбек в другом стеке вызовов), ни узнать о том, закончилась ли операция вообще и закончилась ли она успешно. Всё это рассмотрим в следующих уроках.</p>