在then块中使用类函数

时间:2017-10-17 05:07:54

标签: javascript promise

与Promises和Then块有一些问题。

基本上我无法从当时的区块访问aFunction(x)

这是为什么?我的代码如下:

class myClass {

   aFunction(x) {
    ...
   }

   bFunction(y) {
    return new Promise(function (resolve, reject) {
      request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
          resolve(body.token)
        } else {
          console.log('ERROR: ' + err)
          return reject(false)
        }
      })
    }).then(function(res){
      this.aFunction(res)
    })
   }

}

另一方面,我真的需要那个承诺块吗?

1 个答案:

答案 0 :(得分:1)

您可以使用箭头功能来保留上下文:

.then(res => {
  this.aFunction(res)
});

或者您可以将aFunction直接传递给then,并可能使用bind来保留上下文。

.then(this.aFunction.bind(this));

或者您可以使用变量来保留上下文:

var self = this;
...
.then(function(res){
  self.aFunction(res)
})

在这种情况下:

.then(function(res){
    this.aFunction(res)
});

this不再引用您的类的实例,它引用您作为参数传递给then函数的匿名函数或者设置为它的任何上下文。