![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
Witam,
właśnie powoli odkrywam świat Promisów w JS, ale nie potrafię zrozumieć po co w API większości bibliotek Promise jest metoda done()? Ja rozumiem, że then() połyka zwracane wartości i błędy, a done() z kolei wszystko wyrzuca na zewnątrz do przetworzenia poza Promise, i rozumiem też zasadę "return Promise or call .done() on it", ale po co osobna funkcja do tego? Każdy chain Promisów gdzieś się kończy, czemu ostatni then() w tym chainie w momencie zmiany statusu z PENDING na FULFILLED lub REJECTED po prostu nie zachowuje się automatycznie jak to co robi teraz done()? W ten sposób byloby mniej problemów z używaniem then() vs done(), no i kod byłby bardziej reużywalny, bo łączenie promisów można byłoby robić out-of-the-box zamiast bawić się helperami. Może ktoś mi to rozjaśnić? Ten post edytował Skie 8.10.2015, 17:44:57 -------------------- Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+ Strona Domowa | Elradia MMORPG FireFox: make the web better. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Bo nie ma done w specyfikacji, done jest fanaberią bodajże jQuery, które używało done dla statusu jqXHR.done lub jqXHR.success.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie - polecam poczytać o standardzie A+ https://promisesaplus.com/ na którym opiera się natywna implementacja obiecanek w ES6 (window.Promise). Prawdę mówiąc nigdy nie miałem potrzeby korzystania z czegokolwiek poza then w obiecankach - starcza do wszystkiego (a zwłaszcza chainowania obiecanek)
-------------------- ★Mój blog || Okiem krytyka★
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
@by_ikar
Metoda done() w przypadku jQuery z tego co pamiętam to po prostu metoda bindowania callbacka onFulfilled do ich implementacji Promisów, czyli odpowiednik metod typu success() / complete() analogicznych bibliotek, a nie done(), o które pytam. @Comandeer Specyfikację znam, ale wiedząc jak się ma teoria do rzeczywistej implementacji potrzebowałem opinii kogoś kto ich dużo używał w swoich projektach. Większosć bibliotek - Bluebird v1, Promisejs, CommonJS, ReactPromise i inne - wszędzie pchają te done(). Tak jak myślałem jest to zbędne, dzięki. Ten post edytował Skie 9.10.2015, 20:04:30 -------------------- Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+ Strona Domowa | Elradia MMORPG FireFox: make the web better. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@by_ikar Metoda done() w przypadku jQuery z tego co pamiętam to po prostu metoda bindowania callbacka onFulfilled do ich implementacji Promisów, czyli odpowiednik metod typu success() / complete() analogicznych bibliotek, a nie done(), o które pytam. @Comandeer Specyfikację znam, ale wiedząc jak się ma teoria do rzeczywistej implementacji potrzebowałem opinii kogoś kto ich dużo używał w swoich projektach. Większosć bibliotek - Bluebird v1, Promisejs, CommonJS, ReactPromise i inne - wszędzie pchają te done(). Tak jak myślałem jest to zbędne, dzięki. Właśnie done jest aliasem succes w przypadku jquery i ajaxa: Cytat jqXHR.done(function( data, textStatus, jqXHR ) {}); An alternative construct to the success callback option, the .done() method replaces the deprecated jqXHR.success() method. Refer to deferred.done() for implementation details. źródło: http://api.jquery.com/jquery.ajax/#jqXHR Dlatego mówię że to jest fanaberia jquery, a nie samego promise, które w swojej specyfikacji nie ma czegoś takiego jak done. Niestety za jquery poszło kilka innych libów, w których też to done jest zaimplementowane, efektem czego jest właśnie chociażby ten wątek. Warto szukać nie tyle co popularnych libów, co tych które są implementacją specyfikacji, jak np: https://github.com/kevinconway/Deferred.js |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) ![]() ![]() |
De facto, jeśli nie potrzebuje się wsparcia IE, można skorzystać z natywnego Promise: http://caniuse.com/#feat=promises
No i takie Q czy Bluebird są zgodne ze standardem A+ i dodatkowo dodają np done (są supersetem A+) → https://promisesaplus.com/implementations - inna rzecz, że IMO to done potrzebne nie jest. Problem z jQuery jest inny: obiecanki aż do wersji 3 po prostu nie są zgodne ze standardem A+… -------------------- ★Mój blog || Okiem krytyka★
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 04:03 |