Pitfalls in Promise Docs

Avoiding issues from popular docs

May 10th 2017over 1 year ago

Sep 29th 201817 days ago

Spotting Promise Anti-Patterns in google search results, and popular libraries.

craig-whitehead-433328-unsplash.jpg

Let me start with a confession: I’m guilty of writing the same ‘anti-patterns’ I criticize below, as I’m sure many JS developers are as well. Nothing I’ve laid out is meant to be personal or even directed at the original authors. I’m merely doing a code review on common patterns - I hope to pass along an understanding of my priorities & critical thinking processes.

Hopefully you will be able to spot the warning signs of bad Promises after groking this project.

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

CallbackHell.com

CREDIT: http://callbackhell.com/ image


StrongLoop

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


RisingStack

CREDIT: https://blog.risingstack.com/node-js-async-best-practices-avoiding-callback-hell-node-js-at-scale/ This is a pretty solid article. I only have 1 concern:

image


Q Library

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

The Q library is one of the most used & oldest to be associated with “Promises.” Hence it suffers from aging examples and it’s need to maintain backwards compatibility. I say “associated with ‘Promises’” since I feel Q is really about the deferred pattern.

It may resemble Promises, however I insist it ain’t. It has far too large a surface area for all the wrong reasons. Also the naming convention inconsistently abbreviates names, making it harder to memorize the interface. Methods like when and done are not necessary.

Bottom line: the deferred pattern is a painful anti-pattern - it improves virtually nothing over the typical callback approach.

q first example

q xmlHTTP deferred anti-pattern

Please take a look at (& please star) this article’s companion Github project, Escape From Callback Mountain

Project Goal: research & develop better functional language patterns in JavaScript.