Если не принять мер, рано или позно callback-hell в javascript начнет отравлять вашу жизнь и вы будете искать способ линеаризации кода для композиции асинхронных и синхронных вызовов.
Лично я для линеарилизации асинхронных вызовов предпочитаю использовать библиотеку Q. Впрочем, у всех подобных библиотек примерно одинаковая семантика. Рассмотрим, к примеру, гипотетическую последовательность действий при регистрации пользователя:
1. Регулярными выражениями проверяем что e-mail правилен (sync)
2. Проверяем что пароль сложен (sync)
3. Проверяем существует ли пользователь с таким именем в базе (async)
4. Записываем в базу новую учетную запись, если за это время кто-то другой не создал запись (async)
5. Возвращаем сериализованную запись пользователя или ошибку
Какие выводы можно сделать из вышеприведенного кода?
1. В асинхронной функции создается Q.defer(), возвращается promise, в нужный момент вызываются reject с ошибкой или resolve с результатом выполнения.
2. В синхронной функции возвращается значение или кидается ошибка.
3. Обработку fail имеет смысл централизовать.
4. Поскольку в следующий .then аргументом передается результат выполнения предыдущего, то в этих случаях оберток не требуется (createUser передает user в serializeUser)
Подписаться на:
Комментарии к сообщению (Atom)
Мой список блогов
-
-
Notes on LLMapгод назад
-
Строительноегод назад
-
Будем честными ...год назад
-
Highscalability is Up For Sale2 года назад
-
-
-
-
-
Go Composition vs Inheritance6 лет назад
-
Welcome, Prashanth!6 лет назад
-
Top Developer Collaboration Tools6 лет назад
-
Транспортный микс7 лет назад
-
-
Исповедь скрам тестера7 лет назад
-
-
Running JRuby on the Graal JIT7 лет назад
-
-
-
Скрепкус гигантус8 лет назад
-
Мои твиты8 лет назад
-
-
-
6990 рублей9 лет назад
-
-
Смирение и американские боеголовки9 лет назад
-
-
-
-
-
-
Measuring Activity Startup Time10 лет назад
-
-
-
-
-
Рассказ жителя Мариуполя из первых рук12 лет назад
-
-
Grails - Convention over Configuration12 лет назад
-
$ (dollar) prefix for angularJS12 лет назад
-
-
-
-
Блог закрыт!12 лет назад
-
-
Websphere portal. Create pages programmatically13 лет назад
-
-
-
Tweetbot для Mac13 лет назад
-
Scala-IO Core: Unmanaged Resources13 лет назад
-
Использование шрифтов в JasperReports13 лет назад
-
Аудит менеджмента качества13 лет назад
-
-
Windows 8 Camp14 лет назад
-
-
-
Переезд14 лет назад
-
CSP15 лет назад
-
-
Графоманам15 лет назад
-
ListView Multiple Selection 215 лет назад
-
-
-
UnitOfWork & IdentityMap17 лет назад
-
-
-
-
-
-
-
-
-
Комментариев нет:
Отправить комментарий