⊗jsSpPrmChE 169 of 294 menu

การดักจับข้อผิดพลาดใน Promise Chain ใน JavaScript

สมมติว่าเนื่องจากเหตุผลบางประการ Promise ของเรา สิ้นสุดลงด้วยข้อผิดพลาด:

let promise = new Promise(function(resolve, reject) { setTimeout(function() { reject('error'); }, 3000); });

ในกรณีนี้ การทำงานของโค้ดจะเปลี่ยนไปที่ then ที่มีตัวจัดการข้อผิดพลาด หรือที่ catch แรก ขึ้นอยู่กับ ว่าอันไหนปรากฏขึ้นก่อน

นี่คือตัวอย่างของสถานการณ์แรก:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // การทำงานจะเปลี่ยนมาที่นี่ทันที } ).then( function(result) { console.log(result); } );

นี่คือตัวอย่างของสถานการณ์ที่สอง:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // การทำงานจะเปลี่ยนมาที่นี่ทันที } ).then( function(result) { console.log(result); } );

ฟังก์ชันตัวจัดการมีสองทางเลือกในการดำเนินการ: หากมันสามารถจัดการกับสถานการณ์ผิดปกติได้ มันสามารถส่งกลับผลลัพธ์ผ่าน return และการทำงานจะดำเนินต่อไปตามห่วงโซ่ แต่ถ้ามันไม่สามารถจัดการข้อผิดพลาดได้ มันอาจจะ ไม่ส่งอะไรกลับมา หรือโยนข้อยกเว้น ผ่าน throw ในกรณีนี้การทำงาน จะเปลี่ยนไปยังตัวดักจับข้อผิดพลาดถัดไป (ใน then หรือ catch - สิ่งที่พบ ก่อน)

โดยทั่วไป ข้อผิดพลาดทั้งหมดของห่วงโซ่จะถูกดักจับ ในที่เดียว: catch จะถูกวางไว้ ที่ท้ายห่วงโซ่:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // จะมาที่นี่ในกรณีที่มีข้อผิดพลาด } );

โดยข้อยกเว้นอาจเกิดขึ้นในตัว Promise เอง หรือถูกโยนผ่าน throw ในลิงก์ใด ๆ ของห่วงโซ่:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (ทุกอย่างดี) { return result + '2'; } else { throw new Error('ข้อผิดพลาด'); // เปลี่ยนไปยังตัวดักจับที่ใกล้ที่สุด } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // ตัวดักจับที่ใกล้ที่สุด } );

โปรดทราบว่า catch จำเป็นสำหรับ การวินิจฉัยข้อผิดพลาด: มันแก้ไขได้หรือไม่ หากข้อผิดพลาดแก้ไขได้ catch ควร ส่งการแก้ไขไปยัง then ถัดไป แต่ถ้าแก้ไขไม่ได้ (หรือ catch นี้ แค่ไม่รู้วิธีแก้) เราควร ไม่ส่งอะไรกลับมาหรือโยนข้อยกเว้น:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (ข้อผิดพลาดแก้ไขได้) { return 'ข้อมูล'; // ส่งไปยัง then ถัดไป } else { // ไม่ส่งอะไรกลับมาหรือโยนข้อยกเว้น } } ).then( function(result) { // ที่นี่เราแก้ไขข้อผิดพลาด } );
ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ