javascript,promises,如何在一个范围

时间:2015-09-13 08:22:16

标签: javascript promise angular-promise

我希望能够在 .then 范围内调用一个函数,为此我使用 this.foo()方式。但如果我在 .then 中执行此操作,则会出现错误,因为似乎已丢失。我该怎么办?

在此代码中,这相当于对象具有相同的输出

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

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

这似乎既不起作用

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

1 个答案:

答案 0 :(得分:41)

你的第二个代码示例是正确的方法。由于新功能的范围发生了变化,this也会发生变化,因此您可以在功能之外引用this

失败的原因是因为函数正在使用您传递给函数的a而不是您在其外部定义的全局a

换句话说:

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