2015-09-13 6 views
22

Voglio essere in grado di chiamare una funzione all'interno della portata .then, e per questo io uso il this.foo() modo. Ma se lo faccio all'interno del . Poi ho un errore, dal questo sembra essere perso. Cosa posso fare?javascript, promesse, come accedere a variabili questo all'interno di un ambito poi

In questo codice, questo sarebbe equivalente ad avere la stessa uscita per l'oggetto questo

console.log(this) 
one().then(function() { 
    console.log(this) 
}) 

function one() { 
    var deferred = $q.defer(); 
    deferred.resolve() 
    return deferred.promise; 
} 

Questo non sembra funzionare

console.log(this) 
var a = this; 
one().then(function(a) { 
    console.log(a) 
}) 
+2

Se si rimuove il 'a' argomento da' uno() poi (function (a) { 'in modo che sia' uno() poi (function() {.. ', allora questo ti darà il risultato che desideri – Andy

+0

Sì, lo stavo testando proprio quando ho visto la tua risposta Hai perfettamente ragione! La contrassegnerò come risposta se la pubblichi come risposta – Gerard

risposta

30

vostro esempio secondo codice è il modo giusto andare. Poiché l'ambito cambia nella nuova funzione, anche le variazioni this cambiano, quindi hai ragione a fare riferimento a this al di fuori della funzione.

Il motivo per cui non è riuscito è perché la funzione utilizza a passata nella funzione anziché il a globale definito al di fuori di esso.

In altre parole:

var a = this; 
one().then(function() { 
    console.log(a) 
}); 
+24

o ... 'one(). then (function() { console.log (this) } .bind (this))' _usual disclaimer che internet exploder before 9 è uno spreco di spazio su disco e non dovrebbe mai essere invocato fare altro che visualizzare pagine web statiche_ –

+2

Sì, @JaromandaX, ero j guardando la modifica qualcuno ha fatto la risposta e il codice non sembra giusto. Il tuo sembra accurato. – Andy

+2

il tuo è giusto, e probabilmente più facile da usare in molti casi, sai solo guardando dove metti 'var a = this' esattamente quale' a/this' sarà - mentre, usando bind, potrebbe non essere esattamente quello che aspettarsi o volere per quella questione: p –

Problemi correlati