Como o Angular $ q.when funciona?


95

Alguém pode me explicar como $q.whenfunciona no AngularJS? Estou tentando analisar como $httpfunciona e descobri isso:

var promise = $q.when(config);

E aqui está o objeto de configuração do console do 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

O que acontece depois? Como esse objeto é resolvido ou rejeitado?


$ q implementa padrões de promessa e é apenas um invólucro simples em torno de retornos de chamada em javascript. Então, quando o retorno de chamada é disparado com sucesso, as promessas são resolvidas
Ajay Beniwal

1
@Ajaybeniwal, mas neste caso o objeto foi aprovado, não o retorno de chamada. Como é resolvido / rejeitado no caso de o objeto ser passado, não de retorno de chamada?
SET

Respostas:


113

Chamar $q.whenexige uma promessa ou qualquer outro tipo; se não for uma promessa, ele irá envolvê-la em uma promessa e resolver a chamada. Se você passar um valor para ele, ele nunca será rejeitado.

Dos documentos:

Envolve um objeto que pode ser um valor ou uma promessa (de terceiros) então possível em uma promessa $ q. Isso é útil quando você está lidando com um objeto que pode ou não ser uma promessa, ou se a promessa vem de uma fonte que não é confiável.


If you pass a value to it- mas e se eu passar objeto?
SET

11
valor, objeto, array é tudo o mesmo.
Derek Ekins

3
e se eu passar uma função que retorna uma promessa? isso significa que o retorno de chamada dele receberá o parâmetro de envio de resultado da promessa por resolver?
Onur Topal

3
Onur, quando você diz passar uma função, você quer dizer como um objeto de função:, $q.when(myfunc)ou invocando a função que você passa em $q.when(myfunc()):? Não sei exatamente o que o primeiro fará ... o último invocará myfunc()primeiro e passará o valor | promessa retornada para .when().
jrista
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.