Obietnica to „rzecz”, która reprezentuje „ostateczne” rezultaty operacji, że tak powiem. Należy tu zauważyć, że usuwa szczegóły, kiedy coś się dzieje i pozwala skupić się na tym, co powinno się wydarzyć po tym, jak coś się wydarzy. Spowoduje to czysty, możliwy do utrzymania kod, w którym zamiast wywołania zwrotnego w wywołaniu zwrotnym wewnątrz wywołania zwrotnego, Twój kod będzie wyglądał mniej więcej tak:
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
});
Specyfikacja obietnic mówi, że obietnica jest
then
metoda powinna zwrócić nową obietnicę, która jest spełniona, gdy dane wywołanie zwrotne successHandler lub failureHandler zostanie zakończone. Oznacza to, że możesz łączyć obietnice w łańcuchy, gdy masz zestaw asynchronicznych zadań, które należy wykonać, i mieć pewność, że sekwencjonowanie operacji jest gwarantowane tak, jakbyś używał wywołań zwrotnych. Więc zamiast przekazywać wywołanie zwrotne w wywołaniu zwrotnym w wywołaniu zwrotnym, kod z powiązanymi obietnicami wygląda następująco:
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
Aby dowiedzieć się więcej o obietnicach i dlaczego są super fajne, odwiedź blog Domenica: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/