Một lời hứa là một "điều" đại diện cho kết quả "cuối cùng" của một hoạt động để nói. Điểm cần lưu ý ở đây là, nó trừu tượng hóa các chi tiết về thời điểm xảy ra và cho phép bạn tập trung vào những gì sẽ xảy ra sau khi điều gì đó xảy ra. Điều này sẽ dẫn đến mã sạch, có thể bảo trì trong đó thay vì có một cuộc gọi lại bên trong một cuộc gọi lại bên trong một cuộc gọi lại, mã của bạn sẽ trông giống như:
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
});
Lời hứa 'spec nói rằng một lời hứa
then
phương thức sẽ trả về một lời hứa mới được thực hiện khi thành công được đưa ra hoặc cuộc gọi lại failHandler kết thúc. Điều này có nghĩa là bạn có thể xâu chuỗi các lời hứa khi bạn có một tập hợp các tác vụ không đồng bộ cần được thực hiện và được đảm bảo rằng trình tự các hoạt động được đảm bảo giống như khi bạn đã sử dụng các cuộc gọi lại. Vì vậy, thay vì chuyển một cuộc gọi lại bên trong một cuộc gọi lại bên trong một cuộc gọi lại, mã với các lời hứa được xâu chuỗi trông giống như:
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
Để biết thêm về những lời hứa và lý do tại sao chúng cực hay, hãy xem blog của Domenic: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/