⊗jsSpPrmSS 174 of 294 menu

พรอมิสในรูปแบบซิงโครนัสใน JavaScript

เพื่อแก้ไขปัญหา promise hell ได้มีการคิดค้น ไวยากรณ์พิเศษสำหรับพรอมิสขึ้นมา ซึ่งช่วยให้ เขียนโค้ดแบบอะซิงโครนัสได้ง่ายขึ้นมาก - ใน รูปแบบซิงโครนัส

มาเริ่มศึกษามันกันเถอะ เริ่มต้นด้วยการนำโค้ด จากบทเรียนก่อนหน้ามาก่อน:

function func() { getSmth(2).then(res => { console.log(res); // แสดงผล 4 }); } func();

ถ้าฟังก์ชัน getSmth ของเราเป็น แบบซิงโครนัส เราก็จะสามารถเขียนโค้ดฟังก์ชัน func ใหม่ได้ดังนี้:

function func() { let res = getSmth(2); console.log(res); // แสดงผล 4 }

อย่างไรก็ตาม ฟังก์ชัน getSmth เป็นแบบอะซิงโครนัส ดังนั้นโค้ดด้านบนจึงทำงานไม่ได้ แต่ด้วยการใช้พรอมิสในรูปแบบซิงโครนัส เราก็จะได้สิ่งที่คล้ายกัน มาเริ่มทำกันเถอะ

ก่อนอื่นเราต้องประกาศให้ฟังก์ชัน func ของเราเป็นแบบอะซิงโครนัสด้วยคำสั่งพิเศษ async:

async function func() { }

หลังจากนั้น เราจะสามารถใช้คำสั่งพิเศษ await ภายในฟังก์ชัน func ได้ คำสั่งนี้ เมื่อเขียนไว้หน้าพรอมิส จะบังคับให้ JavaScript รอจนกว่าพรอมิส จะทำงานเสร็จ หลังจากนั้นคำสั่งจะคืนค่า ผลลัพธ์ของพรอมิส และการดำเนินการของโค้ดจะดำเนินต่อไป

ในกรณีของเรา เราต้องเขียน await ก่อนเรียก getSmth เนื่องจากผลลัพธ์ ของการเรียกฟังก์ชันนี้จะเป็นพรอมิส ดังนั้นการดำเนินการ ของโค้ดต่อไปจะดำเนินต่อได้ก็ต่อเมื่อ พรอมิสนี้ทำงานเสร็จแล้วเท่านั้น และผลลัพธ์ ของพรอมิสก็สามารถเก็บไว้ในตัวแปรได้ มาทำตามที่อธิบายกัน:

async function func() { let res = await getSmth(2); console.log(res); // แสดงผล 4 } func();

มาเรียก getSmth หลายๆ ครั้งกัน:

async function func() { let res1 = await getSmth(2); let res2 = await getSmth(3); console.log(res1 + res2); // แสดงผล 13 } func();

และตอนนี้จะเรียก getSmth ในลูป:

async function func() { let arr = [1, 2, 3, 4, 5]; let sum = 0; for (let elem of arr) { sum += await getSmth(elem); } console.log(sum); } func();

เขียนโค้ดต่อไปนี้ใหม่ ด้วยไวยากรณ์ซิงโครนัส:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
ไทย
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
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ