การโหลดภาพแบบอะซิงโครนัสในลูปด้วย JavaScript

ให้เส้นทางไปยังรูปภาพเก็บอยู่ในอาร์เรย์:

javascriptlet arr = ['img1.png', 'img2.png', 'img3.png'];

เราสามารถโหลดรูปภาพเหล่านี้ในลูปได้:

javascriptfor (let path of arr) {
  loadImage(path, function(image, err) {
    document.body.append(image);
  });
}

โค้ดออกมาสวยงามและไม่มี callback hell, อย่างไรก็ตาม เรากลับมาที่ปัญหาสองประการของเรา: ลำดับของรูปภาพไม่ได้รับการรับรองและเป็นไปไม่ได้ ที่จะจับช่วงเวลาที่รูปภาพทั้งหมดโหลดเสร็จ

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

แต่ ไม่ต้องเสียใจ - การแก้ไขปัญหานั้น เป็นไปได้ผ่าน Promise ซึ่งเราจะ ศึกษาในบทเรียนต่อไป