Powiel możliwe:
What are the differences between Deferred, Promise and Future in Javascript?Asynchronous JavaScript - oddzwaniania vs Odroczony/Obietnica
Ostatnio byłem wszelkich starań, aby poprawić jakość moich aplikacji JavaScript.
Jednym z przyjętych przeze mnie wzorców jest użycie osobnego obiektu "kontekst danych" w celu załadowania danych do mojej aplikacji (wcześniej robiłem to bezpośrednio w moich modelach widoku).
Poniższy przykład zwraca dane, który jest zainicjowany na kliencie:
var mockData = (function($, undefined) {
var fruit = [
"apple",
"orange",
"banana",
"pear"
];
var getFruit = function() {
return fruit;
};
return {
getFruit: getFruit
}
})(jQuery);
W większości przypadków będziemy ładowanie danych z serwera, więc nie możemy powrócić natychmiastową reakcję. Wydaje się, mam dwie opcje, jak sobie z tym poradzić w naszym API:
- używając zwrotnego
- Zwracanie promise.
Wcześniej bym zawsze stosować metodę callback:
var getFruit = function(onFruitReady) {
onFruitReady(fruit);
};
// ...
var FruitModel = function(dataContext, $) {
return {
render: function() {
dataContext.getFruit(function(fruit) {
// do something with fruit
});
}
};
};
Jednak widzę, jak to możliwe, aby skończyć w piekle zwrotnego, zwłaszcza przy tworzeniu złożonych aplikacji JavaScript.
Potem natknąłem się na wzór projektu Obietnice. Zamiast wymogu rozmówcę do zasilania zwrotnego, ja zamiast zwracać „obietnice”, które mogą być obserwowane:
var getFruit = function() {
return $.Deferred().resolve(fruit).promise();
};
// ...
dataContext.getFruit().then(function(fruit) {
// do something with fruit
});
widzę oczywiste korzyści wynikające z zastosowania tego wzoru, zwłaszcza, że mogę wait
z wielu obiektów, które mogłyby odroczonego może być bardzo przydatny podczas ładowania danych inicjalizacyjnych dla pojedynczej aplikacji strony.
Jednakże, bardzo chciałbym zrozumieć zalety i wady każdego wzoru, zanim zacznę używać go w gniewie. Interesuje mnie również, czy jest to kierunek, w którym zmierzają inne biblioteki. Wydaje się, że tak jest w przypadku jQuery.
Oto link na skrzypce, którego używam do testowania.
No dobra wiadomość: API Ajax jQuery * już * Obietnice zamian! – Pointy
[Zapoznaj się z mechanizmem tutaj.] (Http://api.jquery.com/jQuery.ajax/#jqXHR) – Pointy
Tak, właśnie w ten sposób natknąłem się na wzór, ponieważ szukałem sposobu abstrakcyjne wywołania ajaxowe. –