web-dev-qa-db-fra.com

javascript, promesses, comment accéder à cette variable à l'intérieur d'une portée

Je veux pouvoir appeler une fonction dans la portée de . Then, et pour cela, j'utilise la manière this.foo (). Mais si je fais cela à l'intérieur du . Then j'obtiens une erreur, puisque this semble être perdu. Que puis-je faire?

Dans ce code, cela équivaudrait à avoir la même sortie pour l'objet this

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

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

Cela ne semble pas fonctionner

console.log(this)
var a = this;
one().then(function(a) {
  console.log(a)
})
34
GWorking

Votre deuxième exemple de code est la bonne façon de faire. Comme la portée change dans la nouvelle fonction, this change également, vous avez donc raison de faire une référence à this en dehors de la fonction.

Cela a échoué parce que la fonction utilise a que vous avez transmise à la fonction plutôt que le a global défini en dehors de celle-ci.

En d'autres termes:

var a = this;
one().then(function () {
  console.log(a)
});
46
Andy