从返回的承诺

时间:2015-08-15 12:00:10

标签: javascript node.js promise this q

我有一个问题,我觉得处理javascript的特性。基本上,我试图在promise的then函数中设置一个成员/类变量。例如:

 this.intuitAuth.authenticate()
      .then(function(oauthObj){
        this.setOauthObj(oauthObj);

        return oauthObj;
      });

其中this.setOauthObj(oauthObj);设置外部对象的成员变量。现在我想也许我的问题是this是问题,因为我在想this引用then函数中的函数。所以我的问题是,如何在承诺的then函数内设置成员变量?或者甚至是可能的。

我想要实现这个的原因是因为我希望在对象的实例中设置这个变量,所以我不必将它作为参数传递给每个方法调用。

1 个答案:

答案 0 :(得分:1)

  

函数的此关键字在JavaScript中的行为略有不同   与其他语言相比。它之间也有一些差异   strict mode和非严格模式。

至少有两种方法可以解决问题:

Bind

假设this.intuitAuth中使用的这个是所需的 this ,那么您可以将函数范围绑定到以下内容:

this.intuitAuth.authenticate()
    .then(function(oauthObj){
        this.setOauthObj(oauthObj);    
        return oauthObj;
     }.bind(this));

保留对所需this

的引用
var _this = this;
this.intuitAuth.authenticate()
    .then(function(oauthObj){
        _this.setOauthObj(oauthObj);    
        return oauthObj;
     });

现在,其中任何一个都可能解决您当前的问题。但是你需要理解问题存在的原因,因此你应该阅读更多关于how the value of this is set in a scope的内容。