คำมั่นสัญญาคือ "สิ่ง" ซึ่งหมายถึงผลลัพธ์ "ท้ายที่สุด" ของการดำเนินการเพื่อที่จะพูด จุดที่ควรทราบที่นี่คือมันสรุปรายละเอียดของเมื่อมีบางสิ่งเกิดขึ้นและช่วยให้คุณมุ่งเน้นไปที่สิ่งที่ควรเกิดขึ้นหลังจากสิ่งนั้นเกิดขึ้น สิ่งนี้จะส่งผลให้โค้ดสะอาดและบำรุงรักษาได้ซึ่งแทนที่จะมีการโทรกลับภายในการโทรกลับภายในการโทรกลับรหัสของคุณจะมีลักษณะดังนี้:
var request = new Promise(function(resolve, reject) {
//do an ajax call here. or a database request or whatever.
//depending on its results, either call resolve(value) or reject(error)
//where value is the thing which the operation's successful execution returns and
//error is the thing which the operation's failure returns.
});
request.then(function successHandler(result) {
//do something with the result
}, function failureHandler(error) {
//handle
});
ข้อมูลจำเพาะของสัญญาระบุว่าสัญญานั้นเป็นของ
then
วิธีการควรกลับสัญญาใหม่ที่ปฏิบัติตามเมื่อประสบความสำเร็จได้รับแฮนด์เลอร์หรือความล้มเหลวแฮนด์เลอร์โทรกลับเสร็จสิ้น ซึ่งหมายความว่าคุณสามารถเชื่อมโยงคำสัญญาเข้าด้วยกันเมื่อคุณมีชุดของงานแบบอะซิงโครนัสที่ต้องดำเนินการและมั่นใจได้ว่าการเรียงลำดับการดำเนินการจะได้รับการรับประกันเหมือนกับว่าคุณใช้โทรกลับ ดังนั้นแทนที่จะส่งกลับภายในโทรกลับภายในโทรกลับรหัสที่มีสัญญาผูกมัดดูเหมือนว่า:
var doStuff = firstAsyncFunction(url) {
return new Promise(function(resolve, reject) {
$.ajax({
url: url,
success: function(data) {
resolve(data);
},
error: function(err) {
reject(err);
}
});
};
doStuff
.then(secondAsyncFunction) //returns a promise
.then(thirdAsyncFunction); //returns a promise
หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสัญญาและเหตุผลที่ทำไมพวกเขาถึงเจ๋งสุด ๆ ให้เช็คเอาต์บล็อกของ Domenic: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/