DanLevy.net

Подводные камни в документации Promise

Избегаем проблем популярных документов

Hero image for Подводные камни в документации Promise

Обнаружение анти‑шаблонов Promise в результатах поиска Google и популярных библиотеках.

craig-whitehead-433328-unsplash.webp

Начну с признания: я сам писал те же «анти‑шаблоны», которые критикую ниже, и уверен, что многие разработчики JS делают то же самое. Всё, что я изложил, не направлено лично ни к кому и тем более не нацелено на оригинальных авторов. Это просто обзор типичных паттернов — я хочу передать вам своё понимание приоритетов и процесса критического мышления.

Надеюсь, после изучения этого проекта вы сможете распознавать сигналы плохих Promise.

  1. CallbackHell.com
  2. StrongLoop
  3. RisingStack
  4. Q Library

CallbackHell.com

CREDIT: http://callbackhell.com/ CallbackHell.com


StrongLoop

CREDIT: https://strongloop.com/strongblog/node-js-callback-hell-promises-generators/ strong loop


RisingStack

CREDIT: https://blog.risingstack.com/node-js-async-best-practices-avoiding-callback-hell-node-js-at-scale/ Это довольно солидная статья. У меня есть лишь одна озабоченность:

Rising Stack


Q Library

CREDIT: https://github.com/kriskowal/q

Библиотека Q — одна из самых часто используемых и старейших, ассоциируемых с «Promise». Поэтому она страдает от устаревших примеров и необходимости поддерживать обратную совместимость.
Я говорю «ассоциируется с ‘Promise’», потому что считаю, что Q на самом деле реализует паттерн deferred.

Она может напоминать Promise, однако я настаиваю, что это не так. У неё слишком большая поверхность API по неправильным причинам. Кроме того, соглашения об именовании непоследовательно сокращают названия, что усложняет запоминание интерфейса. Методы вроде when и done не нужны.

Bottom line: паттерн deferred — болезненный анти‑паттерн, который почти ничего не улучшает по сравнению с обычным подходом через колбэки.

q first example

q xmlHTTP deferred anti-pattern

Пожалуйста, ознакомьтесь с (и поставьте ★) сопутствующим репозиторием статьи на Github — Escape From Callback Mountain

Цель проекта: исследовать и разрабатывать более чистые функциональные паттерны в JavaScript.