Jak działa Angular $ q. Kiedy działa?

96

Czy ktoś może mi wyjaśnić, jak $q.whendziała AngularJS? Próbuję przeanalizować, jak $httpdziała i znalazłem to:

var promise = $q.when(config);

A oto obiekt konfiguracyjny z konsoli Chrome:

Object {transformRequest: Array[1], transformResponse: Array[1], cache: Object, method: "GET", url: "/schedule/month_index.html"…}
cache: Object
headers: Object
method: "GET"
transformRequest: Array[1]
transformResponse: Array[1]
url: "/schedule/month_index.html"
__proto__: Object

Co się potem dzieje? Jak ten obiekt zostaje rozwiązany lub odrzucony?

ZESTAW
źródło
$ q implementuje wzorce obietnic, to po prostu proste opakowanie wokół wywołań zwrotnych w javascript. Więc kiedy wywołanie zwrotne zostanie pomyślnie uruchomione, obietnice zostaną rozwiązane
Ajay Beniwal
1
@Ajaybeniwal, ale w tym przypadku przekazano obiekt, a nie wywołanie zwrotne. Jak rozwiązano / odrzucono w przypadku przekazania obiektu, a nie wywołania zwrotnego?
USTAWIONY

Odpowiedzi:

115

Wezwanie $q.whenprzyjmuje obietnicę lub jakikolwiek inny rodzaj, jeśli nie jest to obietnica, to owinie ją w obietnicę i wywoła rozwiązanie. Jeśli przekażesz mu wartość, to nigdy nie zostanie odrzucona.

Z dokumentów:

Zawija obiekt, który może być wartością lub (zewnętrzną) obietnicą możliwą do użycia w obietnicę $ q. Jest to przydatne, gdy masz do czynienia z obiektem, który może być obietnicą lub nie, lub jeśli obietnica pochodzi ze źródła, któremu nie można ufać.

Derek Ekins
źródło
If you pass a value to it- ale co jeśli mijam obiekt?
USTAW
11
wartość, obiekt, tablica to wszystko to samo.
Derek Ekins
3
co się stanie, jeśli przekażę funkcję zwracającą obietnicę? czy to znaczy, że wtedy wywołanie zwrotne zostanie przekazane do parametru wyniku obietnicy wysłanego przez rozwiązanie?
Onur Topal
3
Onur, kiedy mówisz przekazać funkcję, czy masz na myśli obiekt funkcji:, $q.when(myfunc)czy też wywołując funkcję, którą przekazujesz $q.when(myfunc()):? Nie wiem dokładnie, co zrobi ta myfunc()pierwsza ... druga wywoła najpierw i przekaże zwróconą wartość obietnicy do .when().
jrista