خاموش ناکامیوں کا خطرہ آپ کام مکمل کرنے کے لیے ٹولز کا استعمال کرتے ہیں۔ لیکن کیا ہو اگر کوئی ٹول بغیر کسی غلطی (error) کے غلط جواب دے دے؟ یہ اس ٹول سے زیادہ خطرناک ہے جو کریش (crash) ہو جائے۔ کریش ایک اشارہ ہے، جبکہ خاموش ناکامی ایک دھوکہ ہے۔
مجھے اپنے براؤزر ٹول میں ایک بگ (bug) ملا۔ اس نے ویب پیج کے طور پر "[object Promise]" واپس کیا۔ میں نے اسی طرح کے مسائل تلاش کیے اور مجھے 10 مزید ٹولز ملے جن میں یہی بگ تھا۔ مسئلہ کوئی ٹائپو (typo) نہیں تھا، بلکہ ایک ڈھانچہ (shape) تھا۔ یہ ڈھانچہ پورے کوڈ بیس (codebase) میں کاپی کیا گیا تھا۔
یہ بگ اس لیے ہوا کیونکہ AppleScript کا do JavaScript سنکرونس (synchronous) ہے۔ یہ async کام کے مکمل ہونے کا انتظار کیے بغیر فوری طور پر جواب دے دیتا ہے۔ اس کا مطلب یہ ہے کہ اگر آپ do JavaScript کو کوئی async فنکشن پاس کرتے ہیں، تو یہ فنکشن کا نتیجہ نہیں بلکہ ایک Promise آبجیکٹ واپس کرے گا۔
اسے ٹھیک کرنے کے لیے، میں نے async لوپ کو Node کی طرف منتقل کر دیا۔ میں پیج کی حالت (state) کو اس کے مستحکم ہونے تک پول (poll) کرنے کے لیے ایک ہیلپر فنکشن استعمال کرتا ہوں، اور پھر نتیجہ پڑھتا ہوں۔ اس طرح، await Node میں رہتا ہے، اور پیج میں کال ایک واحد سنکرونس ایکسپریشن (synchronous expression) بن جاتی ہے۔
سبق یہ ہے کہ async لوپ کو اس طرف رکھیں جو await کر سکے، اور سرحد (boundary) کے پار await کرنے کے بجائے، وہاں کے قابل مشاہدہ ہونے والی حالت (observable state) کو پول کریں۔ پل (bridge) سے انتظار کرنے کو نہ کہیں۔ اس سے بار بار پوچھیں، "کیا آپ کا کام ہو گیا؟" — اور انتظار خود کریں۔
اگر آپ ایجنٹ ٹولنگ (agent tooling) بنا رہے ہیں، تو خاموش ناکامیوں سے ہوشیار رہیں۔ اپنے کوڈ بیس میں ان ٹولز کو تلاش (grep) کریں جو "[object Promise]" واپس کرتے ہیں یا پرانی حالت (stale state) پر کام کرتے ہیں۔ اگر آپ کو کوئی ایسا ٹول ملے، تو صرف اسے ٹھیک نہ کریں۔ اس کے ہمزادوں کو تلاش کریں اور اس ڈھانچے کو ٹھیک کریں جو کاپی کیا گیا تھا۔