2014-09-03 9 views
5

Secondo the Angular docs on $q, $ D. Quando() si aspetta una promessa/valore al passato in.

Ma ho appena incontrato il codice di qualcun altro, dove si chiama senza passare in qualsiasi params. Ecco una versione semplificata di quello che vedo:

var modal = false; 

if (modalOpen) { 
    return $q.when() 
} 
modalOpen = true; 

modal = newModal({ 
    template: opts.template, 
}); 

modal.result.finally(function(){ 
    modalOpen = false; 
}); 
} 

risposta

6

metodi dovrebbero entrambi tornare sincrono o asincrono tornare a rimanere coerenti. Se un metodo restituisce in modo sincrono a volte e continua a mantenere il fatto a volte è già risolto in modo trasparente, restituisce una promessa risolta vuota. Avere API che a volte restituiscono promesse e talvolta in modo sincrono è un recipe for trouble.

L'utilizzo di $q.when è il modo più semplice per ottenere una promessa risolta vuota in Angular.

+0

ottima risposta. Esattamente quello di cui avevo bisogno. Grazie! –

+0

Contento di aver potuto aiutare. Vale la pena ricordare che anche il caso di errore è vero - Promise i metodi di restituzione non dovrebbero "lanciare" in modo sincrono ma piuttosto restituire i rifiuti. –