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?

CONJUNTO
fonte
$ 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.

Derek Ekins
fonte
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