𝗧𝗵𝗲 𝗗𝗮𝗻𝗴𝗲𝗿 𝗼𝗳 𝗦𝗶𝗹𝗲𝗻𝘁 𝗙𝗮𝗶𝗹𝘂𝗿𝗲𝘀 Anda menggunakan alatan untuk menyelesaikan kerja. Tetapi bagaimana jika sesuatu alatan memberikan jawapan yang salah tanpa sebarang ralat? Ini lebih berbahaya daripada alatan yang mengalami crash. Sebuah crash adalah penanda jalan. Kegagalan senyap adalah satu pemalsuan.
Saya menemui pepijat dalam alatan pelayar saya. Ia mengembalikan "[object Promise]" sebagai laman web. Saya mencari isu yang serupa dan menemui 10 lagi alatan dengan pepijat yang sama. Masalahnya bukan kesilapan taip, tetapi satu corak. Corak ini telah disalin ke seluruh kod sumber.
Pepijat itu berlaku kerana do JavaScript dalam AppleScript adalah segerak (synchronous). Ia mengembalikan hasil dengan serta-merta, tanpa menunggu kerja async selesai. Ini bermakna jika anda menghantar fungsi async kepada do JavaScript, ia akan mengembalikan objek Promise, bukannya hasil fungsi tersebut.
Untuk membaiki ini, saya memindahkan gelung async ke bahagian Node. Saya menggunakan fungsi pembantu untuk melakukan polling pada keadaan halaman sehingga ia stabil, kemudian membaca hasilnya. Dengan cara ini, await berada di dalam Node, dan panggilan ke halaman tersebut adalah satu ekspresi segerak yang tunggal.
Pengajarannya adalah untuk mengekalkan gelung async pada bahagian yang boleh melakukan await, dan lakukan polling pada keadaan yang boleh diperhatikan (observable state) merentasi sempadan, bukannya melakukan await merentasi sempadan tersebut. Jangan minta jambatan itu menunggu. Tanya ia, berulang kali, "adakah anda sudah selesai?" — dan lakukan penantian itu sendiri.
Jika anda sedang membina alatan ejen, berwaspadalah terhadap kegagalan senyap. Grep kod sumber anda untuk alatan yang mengembalikan "[object Promise]" atau bertindak berdasarkan keadaan lapuk (stale state). Jika anda menjumpainya, jangan sekadar membaikinya. Cari "adik-beradiknya" dan baiki corak yang telah disalin itu.