JavaScript Async / รอข้อผิดพลาดด้วย ForEach

สร้างแอปที่ปราศจากข้อบกพร่อง

ภาพโดย ALAN DE LA CRUZ บน Unsplash

ข้อผิดพลาดทั่วไปใน JavaScript คือการใช้งานasync/awaitร่วมกับforEach. ลองดูตัวอย่างที่มีฟังก์ชันอะซิงโครนัสแบบธรรมดา ( asyncPrint) ที่พิมพ์ค่าไปยังคอนโซล สมมติว่าเราต้องการเรียกมันตามลำดับสำหรับทุกค่าในอาร์เรย์ผ่านforEach:

เราอาจคาดหวังผลลัพธ์ต่อไปนี้:

1
2
3

อะไรคือปัญหา?

forEachคาดว่าจะมีฟังก์ชันซิงโครนัส ซึ่งหมายความว่าจะไม่ รอฟังก์ชันอะซิงโครนัสที่ส่งผ่านของเรา หากเราคิดเป็นอย่างอื่นเราอาจคาดหวังว่าลูปจะเทียบเท่ากับรหัสต่อไปนี้:

await asyncPrint(1);
await asyncPrint(2);
await asyncPrint(3);

asyncPrint(1);
asyncPrint(2);
asyncPrint(3);

แต่เราจะบรรลุสิ่งที่เราต้องการในตอนแรกได้อย่างไร? แม้ว่าจะมีวิธีแก้ไขปัญหานี้หลายวิธี แต่วิธีที่ง่ายที่สุดคือการใช้for..of คำสั่ง:

สิ่งนี้จะสร้างผลลัพธ์ที่เราต้องการ

สรุป

แม้ว่าจะเป็นเอกสารข้อเท็จจริงที่Array.prototype.forEach()คาดว่าจะมีฟังก์ชันซิงโครนัส แต่ก็ยังอาจทำให้เกิดข้อผิดพลาดได้หากคุณไม่รู้ ปัญหาคือคุณสามารถส่งผ่านฟังก์ชันอะซิงโครนัสได้อย่างง่ายดายและคุณจะไม่ได้รับคำเตือนใด ๆ ดังนั้นคุณสามารถผ่านมันไปได้และคิดว่ารหัสของคุณจะใช้งานได้ยกเว้นจะไม่ทำ

ตอนนี้คุณรู้แล้วอย่าลืมส่งเฉพาะฟังก์ชันอะซิงโครนัสหากคุณไม่ต้องการให้เรียกตามลำดับอย่างชัดเจน และโปรดทราบว่าไม่ใช่นักพัฒนาทุกคนที่อ่านโค้ดของคุณอาจเห็นความตั้งใจนั้น

อ้างอิง

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
  • https://tc39.es/ecma262/#sec-array.prototype.foreach

Suggested posts

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

ตัดตอนมาจาก Small, Sharp Software Tools โดย Brian P. Hogan

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้

หลีกเลี่ยงผลร้ายของโรคหลอดเลือดสมอง: เรียนรู้จากการเดินทางของครอบครัว

หลีกเลี่ยงผลร้ายของโรคหลอดเลือดสมอง: เรียนรู้จากการเดินทางของครอบครัว

บทนำ โรคหลอดเลือดสมองเป็นเหตุฉุกเฉินทางการแพทย์ที่สามารถส่งผลกระทบต่อทุกคนได้ตลอดเวลา เกิดขึ้นเมื่อการไหลเวียนของเลือดไปยังส่วนหนึ่งของสมองหยุดชะงัก นำไปสู่การสูญเสียการทำงานของสมองอย่างกะทันหัน

Related posts

ไม่มีรหัสผ่านอีกต่อไป — รหัสผ่านจะมาแทนที่รหัสผ่านของคุณได้อย่างไร

ไม่มีรหัสผ่านอีกต่อไป — รหัสผ่านจะมาแทนที่รหัสผ่านของคุณได้อย่างไร

เพื่อหลีกเลี่ยงความกำกวม เราจะใช้คำศัพท์ต่อไปนี้ ผู้รับรองความถูกต้อง; โทรศัพท์มือถือที่ใช้ในการเข้าสู่ระบบเว็บไซต์; เว็บไซต์หรือแอปพลิเคชันที่ผู้ใช้ใช้เพื่อส่งคำขอเข้าสู่ระบบ ผู้ขายที่ให้บริการเช่น

อะไรทำให้พอดคาสต์มีอิทธิพล?

อะไรทำให้พอดคาสต์มีอิทธิพล?

เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์

บทสนทนาอันตราย

บทสนทนาอันตราย

หากเราต้องการจะเติบโตบนโลกใบนี้ต่อไป เราจะต้องสนทนาที่อันตราย คนที่ท้าทายสิ่งที่เราทำ สิ่งที่เรากำลังทำ และสิ่งที่เรากำลังจะทำต่อไป (หรือกำลังวางแผนที่จะทำ)

วิธีช่วยโลกและสร้างรายได้

วิธีช่วยโลกและสร้างรายได้

กี่ครั้งแล้วที่คุณทิ้งขวดพลาสติก เหยือกแก้ว กระป๋องอะลูมิเนียม หรือบรรจุภัณฑ์พลังงานสีเขียวโดยไม่คิดซ้ำสอง กี่ครั้งแล้วที่คุณอยากได้อะไรตอบแทนจากการรีไซเคิลมัน? ถ้าคุณเป็นเหมือนคนส่วนใหญ่ คำตอบคือหลายครั้ง การรีไซเคิลมักถูกมองว่าเป็นเรื่องยุ่งยาก เป็นงานบ้าน หรือเป็นหน้าที่ที่ไม่ก่อให้เกิดประโยชน์ในทันทีหรือจับต้องได้