[Javascript] Promise And Callback

Panya.Bas
1 min readDec 15, 2017

เมื่อมีการทำงานเกี่ยวกับ Asynchronous Fuction

Asynchronous Fuction คือ function ที่เราสั่งให้มันทำงานแล้ว ไม่รอให้ทำงานเสร็จก่อน ถึงจะไปทำงานใน function ถัดไป ซึ่งผลลัพธ์ของ function แบบนี้นั้นจะกลับมาด้วยสิ่งที่เราเรียกว่า callback ตัวอย่างเช่น

function sum (num1, num2, callback) {
setTimeout(function () { callback(num1 + num2); }, 1000);
}

sum(1, 2, function (result) { console.log(result); });

จากโค๊ดข้างบนคือ ผลลัพธ์จะแสดงออกมาหลังจาก 1sec ที่เรียกใช้ function และผลลัพธ์ที่ได้จะกลับมาที่ function(result){ console.log(result) } function นี้จะเรียกว่าเป็น callback function ที่รอผลลัพธ์กลับมาคือ result และแสดงค่าออกมาคือ 3 นั่นเอง แล้วถ้าอยากเอาผลลัพธ์ที่ได้ไปบวกต่อหละ ก้ทำได้โดย

sum(1,2,function(result){
const myResult = result; // myResult = 3
sum(myResult,3,function(result){
console.log(result) // result = 6
})
})

จากโค๊ดด้านบนจะได้ผลลัพธ์เท่ากับ 6 แต่สังเกตุว่าโค๊ดจะดูค่อนข้างลำบากหากเราต้องการนำผลลัพธ์ที่ได้จาก callback ไปดำเนินการต่อหลายๆครั้ง เช่น

sum(1,2,function(result){
const myResult = result;
sum(myResult,3,function(result){
const myResult = result;
sum(myResult,4,function(result){
const myResult = result;
sum(myResult,5,function(result){
console.log(result)
})
})
})
})

ดังนั้น Promise จึงถูกสร้างขึ้นมาแก้ปัญหาตรงนี้ เพื่อให้ code ดูง่ายยิ่งขึ้น

function sum (num1, num2,) {
return new Promise((resolve, reject) => {
setTimeout(function () { resolve(num1+num2) }, 1000);
});
}
sum(1, 2).then((result) => {
return sum(result, 3);
}).then((result) => {
return sum(result, 4);
}).then((result) => {
return sum(result, 5);
}).then((result) => {
console.log(result);
});

นั่นแหละฮะท่านผู้ชม ดูง่ายขึ้นเยอะ

--

--