DanLevy.net

מלכודות בתיעוד Promise

הימנעות מבעיות במסמכים נפוצים

Hero image for מלכודות בתיעוד Promise

זיהוי דפוסים אנטי-תבניתיים של Promise בתוצאות חיפוש בגוגל ובספריות פופולריות.

craig-whitehead-433328-unsplash.webp

הרשו לי להתחיל בווידוי: גם אני אשם בכתיבת אותם ‘דפוסים אנטי-תבניתיים’ שאני מבקר להלן, כפי שאני בטוח שמפתחי JS רבים גם כן. שום דבר שפרשתי כאן אינו נועד להיות אישי או אפילו מכוון למחברים המקוריים. אני פשוט עושה סקירת קוד על דפוסים נפוצים – אני מקווה להעביר הבנה של סדרי העדיפויות שלי ותהליכי החשיבה הביקורתית.

בתקווה שתוכלו לזהות את סימני האזהרה של Promise גרועים לאחר שתבינו את הפרויקט הזה.

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

CallbackHell.com

קרדיט: http://callbackhell.com/ CallbackHell.com


StrongLoop

קרדיט: https://strongloop.com/strongblog/node-js-callback-hell-promises-generators/ strong loop


RisingStack

קרדיט: https://blog.risingstack.com/node-js-async-best-practices-avoiding-callback-hell-node-js-at-scale/ זהו מאמר די מוצק. יש לי רק חשש אחד:

Rising Stack


Q Library

קרדיט: https://github.com/kriskowal/q

ספריית Q היא אחת הספריות הנפוצות והוותיקות ביותר שמקושרות ל-‘Promises’. לפיכך היא סובלת מדוגמאות מזדקנות ומהצורך לשמור על תאימות לאחור. אני אומר ‘מקושרות ל-Promises’ כי אני מרגיש ש-Q באמת עוסקת בתבנית ה-deferred.

היא אולי דומה ל-Promises, אבל אני מתעקש שהיא לא. יש לה שטח פנים גדול מדי מכל הסיבות הלא נכונות. כמו כן, מוסכמות השמות מקצרות שמות באופן לא עקבי, מה שמקשה על שינון הממשק. מתודות כמו when ו-done אינן נחוצות.

השורה התחתונה: תבנית ה-deferred היא אנטי-תבנית כואבת - היא לא משפרת כמעט דבר לעומת גישת הקולבק הטיפוסית.

דוגמה ראשונה של Q

אנטי-תבנית deferred של xmlHTTP ב-Q

אנא עיינו (ותנו כוכב) בפרויקט ה-GitHub הנלווה למאמר זה, Escape From Callback Mountain

מטרת הפרויקט: לחקור ולפתח תבניות שפה פונקציונליות טובות יותר ב-JavaScript.