สมมติว่าเรามีอาร์เรย์ของสององค์ประกอบโดยที่องค์ประกอบทั้งสองเป็นฟังก์ชันแบบอะซิงโครนัสสองฟังก์ชัน เราจำเป็นต้องทำงานบางอย่าง เช่น พิมพ์บางอย่างไปที่คอนโซล (เพื่อจุดประสงค์ของคำถามนี้) เมื่อการดำเนินการของฟังก์ชัน async ทั้งสองเสร็จสมบูรณ์
เราจะจัดการกับความท้าทายนี้ได้อย่างไร
โดยทั่วไปมีสองวิธีในการดำเนินการบางอย่างเมื่อเสร็จสิ้นภารกิจอะซิงโครนัสบางอย่าง -
- การใช้สัญญา
- การใช้ฟังก์ชัน async/await
แต่เมื่อโค้ดรวมการจัดการกับฟังก์ชันอะซิงโครนัสหลายฟังก์ชัน (มากกว่าหนึ่ง) ฟังก์ชัน Promise.all ของฟังก์ชันแรกจะมีความได้เปรียบเหนือฟังก์ชันหลัง
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const arr = [ new Promise((resolve, reject) => { setTimeout(() => { resolve('func1 fired!'); }, 2000); }), new Promise((resolve, reject) => { setTimeout(() => { resolve('func2 fired'); }, 3000); }) ]; const lastFunction = () => { console.log('this function should be fired at the very last'); }; Promise.all([arr[0], arr[1]]).then((resp) => { console.log(resp); lastFunction(); }).catch((err) => { console.log('something unexpected happened'); })
ผลลัพธ์
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ในคอนโซล -
[ 'func1 fired!', 'func2 fired' ] this function should be fired at the very last