สถานะของพรอมิสใน JavaScript
พรอมิสสามารถอยู่ในหนึ่งในสามสถานะ เมื่อสร้างขึ้นพรอมิสจะอยู่ในสถานะรอ (pending) จากนั้นอาจเปลี่ยนเป็นสถานะสำเร็จ (fulfilled) โดยส่งคืนผลลัพธ์ที่ได้รับ หรือสถานะถูกปฏิเสธ (rejected) โดยส่งคืน สาเหตุของความล้มเหลว คุณสามารถดูการเปลี่ยนผ่าน จากหนึ่งสถานะไปอีกสถานะได้โดยเรียกใช้โค้ดต่อไปนี้:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // ตั้งค่าเป็น true หรือ false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('error in promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // แสดงพรอมิสในคอนโซลทุกวินาที
}, 1000);
โปรดทราบว่าสถานะ fulfilled และ rejected ไม่สามารถเปลี่ยนแปลงได้: หากพรอมิสเปลี่ยน เป็นหนึ่งในสถานะเหล่านี้ มันจะไม่สามารถ เปลี่ยนเป็นสถานะอื่นได้อีก มาดูตัวอย่างกัน ในโค้ดต่อไปนี้การเรียก reject จะเกิดขึ้น ก่อน ดังนั้นการเรียก resolve จะถูก เพิกเฉย:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('error')), 1000);
setTimeout(() => resolve('ignored'), 2000);
});
สร้างพรอมิสที่ดำเนินการสำเร็จ หลังจากเวลาผ่านไปสักครู่ แสดงมันในคอนโซล และศึกษาสถานะเริ่มต้นและสถานะที่เสร็จสิ้น
สร้างพรอมิสที่ดำเนินการล้มเหลว หลังจากเวลาผ่านไปสักครู่ แสดงมันในคอนโซล และศึกษาสถานะเริ่มต้นและสถานะที่เสร็จสิ้น