Użyj jQuery lub Q. js dla obietnic
Przyglądam się BreezeJs i są próbki za pomocą Q. JS do obsługi wywołań asynchronicznych. John Papa również używa Q. JQuery ma również. Jakie są różnice między nimi?
3 answers
Oba są oparte na Promises / a standard i implementują metodę then
(choć tylko obecne jQuery, kiedyś miały niezgodną pipe
zamiast then
). Istnieje jednak kilka różnic: {]}
- Q obsługuje wyjątki. Wszystkie wyrzucone błędy w wywołaniach asynchronicznych
then
zostaną przechwycone i odrzucone obietnica(i zostaną ponownie rzucone tylko wtedy, gdy wywołasz.end()
). Nie jestem pewien, czy mi się to podoba. Jest to standaryzowany sposób, w jaki jQuery nie podąża, odrzucanie zthen
w jQuery deferreds jest znacznie bardziej skomplikowane. - obietnice Q są rozwiązywane z pojedynczą wartością / powodem (jak zwracasz/wyrzucasz z
then
), podczas gdy jQuery pozwala na wiele argumentów wresolve
/reject
wzywa do odroczenia. - Q ma wiele metod Proxy które pozwolą Ci modyfikować przyszłe wartości
- Q ma
.all
i podobne, które są bardziej skomplikowane z jQuery ($.when.apply($, […])
). - Q działa jawnie z zaznacza w pętli event i gwarantuje asynchroniczność, podczas gdy jQuery może być również synchroniczne. Jest to teraz wymagane przez obietnice a / + specyfikacja .
... czyli w zasadzie obietnice/B . Jak widać, API Q
jest potężniejsze i (imho) lepiej zaprojektowane. W zależności od tego, co chcesz zrobić, Q
może być lepszym wyborem, ale może jQuery (zwłaszcza jeśli już jest włączone) wystarczy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:56
JQuery ' s promise implementacja obietnic / spec ma pewne realne problemy. Poniższy link opisuje je znacznie lepiej niż ja: missing-the-point-of-promises
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-20 17:03:29
Odpowiedź Bergi obejmuje rzeczy dość dobrze. Chciałem jednak dodać, że stworzyliśmy przewodnik dla użytkowników Q pochodzący z jQuery . Aby podsumować odpowiednie sekcje:
- Q obsługuje wyjątki, umożliwiając obsługę wszystkich błędów za pomocą jednolitego interfejsu.
- Q skupia się na łańcuchowaniu wszystkimi metodami, podczas gdy jQuery zezwala tylko na łańcuchowanie z
then
/pipe
. - Q obiecuje gwarancję asynchroniczności, unikając w ten sposób zagrożeń związanych z przepływem sterowania i wyścigu warunki wynikające z zachowania jQuery sometimes-sync, sometimes-async.
- obietnice Q są zawsze spełniane z pojedynczą wartością lub odrzucane z jednego powodu, tak jak funkcje synchroniczne zawsze zwracają pojedynczą wartość lub rzucają pojedynczy wyjątek.
- Q wymusza rozdzielenie pomiędzy deferred I promise, podczas gdy jQuery łączy je w jeden obiekt z opcją oddzielenia ich.
- Q nie śledzi obiektu kontekstowego wraz z fulfillment lub odrzucenie, ponieważ nie ma równoległości dla funkcji synchronicznych (tzn. nigdy nie zwraca się wartości, jak również
this
, w której musi działać wywołujący). Nie ma więcresolveWith
anirejectWith
. - Q używa terminologii Promises/A+; główną różnicą jest to, że Q używa "spełnionego", gdzie jQuery używa "resolved", a w Q "resolved" oznacza coś bardziej subtelnego.
Przewodnik zawiera również tabelę równoległą do interfejsów API jQuery i Q promise.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 07:44:48