⊗jsSpPrmFC 171 of 294 menu

การสร้าง Promise ที่เสร็จสมบูรณ์แล้วใน JavaScript

บางครั้งคุณอาจต้องการสร้าง Promise ที่เสร็จสิ้นการทำงานแล้ว สำหรับสิ่งนี้มีอยู่ สองวิธี: เมธอด Promise.resolve สร้าง Promise ที่สำเร็จ, Promise.reject สร้าง Promise ถูกปฏิเสธ พารามิเตอร์ของ เมธอดเหล่านี้จะได้รับค่าที่จะเป็นผลลัพธ์ หรือข้อผิดพลาดของ Promise ตามลำดับ

เมื่อไรที่เราอาจต้องการ Promise ที่เสร็จสิ้นแล้ว? ลองดูตัวอย่าง สมมติว่า เรามีฟังก์ชันบางอย่างที่รับพารามิเตอร์ เป็นตัวเลข, ทำบางอย่างกับมันแบบอะซิงโครนัส และส่งคืน Promise พร้อมผลลัพธ์:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

เราจะใช้ฟังก์ชันของเราดังต่อไปนี้ วิธี:

func(5).then(function(res) { console.log(res); // จะแสดง 25 });

สมมติว่าตอนนี้เราตัดสินใจว่าการดำเนินการอะซิงโครนัส ของเราเราจะดำเนินการก็ต่อเมื่อ ส่งตัวเลขมากกว่าศูนย์มา มิฉะนั้น ผลลัพธ์ของฟังก์ชันควรเป็นศูนย์:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // ผลลัพธ์เป็นศูนย์ } }

อย่างไรก็ตาม ตอนนี้ปรากฎว่าฟังก์ชันส่งคืน เป็น Promise หรือเป็นตัวเลข ด้วยเหตุนี้เรา ไม่สามารถใช้เมธอด then กับผลลัพธ์ ของฟังก์ชันได้อีกต่อไป เนื่องจากในกรณีที่ฟังก์ชันส่งคืน เป็นตัวเลขเราจะได้ข้อผิดพลาด:

func(0).then(function(res) { // ข้อผิดพลาด, เราใช้เมธอด then กับศูนย์ });

Promise.resolve จะช่วยเราแก้ไขปัญหา:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // ส่งคืน Promise, ไม่ใช่ตัวเลข } }

สมมติว่าตอนนี้เราตัดสินใจว่าสำหรับเลขศูนย์ที่ส่งมา เราควรส่งคืนศูนย์ และสำหรับตัวเลข น้อยกว่าศูนย์ - ควรเป็นการยกเว้น วิธีนี้จะช่วยเราได้ ด้วยเมธอด Promise.reject:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // ส่งคืน Promise ที่ถูกปฏิเสธ } }
ไทย
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
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ