𝗧𝗵𝗲 𝗗𝗮𝗻𝗴𝗲𝗿 𝗼𝗳 𝗦𝗶𝗹𝗲𝗻𝘁 𝗙𝗮𝗶𝗹𝘂𝗿𝗲𝘀 तुम्ही काम पूर्ण करण्यासाठी टूल्स वापरता. पण जर एखाद्या टूलने एरर न दाखवता चुकीचे उत्तर दिले तर? हे क्रॅश होणाऱ्या टूलपेक्षा जास्त धोकादायक आहे. क्रॅश होणे हे एक संकेत आहे. मूक अपयश (silent failure) हे एक बनावटपण आहे.

मला माझ्या ब्राउझर टूलमध्ये एक बग आढळला. त्याने वेबपेज म्हणून "[object Promise]" परत केले. मी अशाच समस्या शोधल्या आणि मला असेच १० इतर टूल्स आढळले ज्यामध्ये तोच बग होता. ही समस्या टायपिंगच्या चुकीमुळे (typo) नव्हती, तर एका रचनेमुळे (shape) होती. ही रचना संपूर्ण कोडबेसमध्ये कॉपी केली गेली होती.

हा बग AppleScript च्या do JavaScript मुळे झाला कारण ते synchronous आहे. ते async काम पूर्ण होण्याची वाट न पाहता लगेच रिझल्ट परत करते. याचा अर्थ असा की, जर तुम्ही do JavaScript ला एखादे async फंक्शन दिले, तर ते फंक्शनचा रिझल्ट न देता एक Promise object परत करेल.

हे सुधारण्यासाठी, मी async लूप Node च्या बाजूला हलवले. मी पेजची स्थिती (state) स्थिर होईपर्यंत ती तपासण्यासाठी (poll) एक हेल्पर फंक्शन वापरतो आणि त्यानंतर रिझल्ट वाचतो. अशा प्रकारे, await हे Node मध्ये राहते आणि पेजमधील कॉल हा एक सिंगल synchronous expression असतो.

यातून शिकण्यासारखी गोष्ट ही आहे की, async लूप अशा बाजूला ठेवा जी await करू शकते, आणि बाउंडरीच्या पलीकडे await करण्याऐवजी बाउंडरीच्या पलीकडील दृश्यमान स्थिती (observable state) तपासत (poll) राहा. ब्रिजला थांबायला सांगू नका. त्याला वारंवार विचारा, "तुझे काम झाले का?" — आणि थांबण्याचे काम स्वतः करा.

जर तुम्ही एजंट टूलिंग (agent tooling) बनवत असाल, तर मूक अपयशांपासून सावध राहा. तुमच्या कोडबेसमध्ये असे टूल्स शोधण्यासाठी grep करा जे "[object Promise]" परत करतात किंवा जुन्या स्थितीवर (stale state) काम करतात. जर तुम्हाला असे काही आढळले, तर फक्त ते दुरुस्त करू नका. त्याचे इतर संबंधित भाग (siblings) शोधा आणि ती कॉपी केलेली रचना दुरुस्त करा.

स्रोत: https://dev.to/achiya-automation/my-browser-tool-returned-object-promise-as-a-webpage-one-grep-later-10-more-tools-had-the-37p8