JavaScript - 使用"这个"与链式承诺

时间:2017-06-15 20:07:53

标签: javascript ecmascript-6 promise

我正在用ES6编写一些Node代码。在我的代码中,我有一个类,如下所示。请注意,这是一个用于隔离和显示问题的基本示例。

class MyClass {
  constructor() {
    this.id = uuid();
    this.number = Math.floor((Math.random() * 100) + 1);
  }

  process() {
    this.validateNumber()
      .then(this.generateImage)
      .catch(function(err) {
        console.log(err);
      })
    ;
  }

  validateNumber() {
    let self = this;
    var promise = new Promise(function(resolve, reject) {
      // do stuff with self.number
      resolve({});
    });
  }

  generateImage() {
    console.log(this);
    // the above prints "undefined" in the console window
    // how do I get this.number again?

  }
}

在本课程中,您会注意到我在构造函数中生成了一个随机数。我希望这个数字可以在我班上的所有方法中使用。但是,由于我有一种将承诺链接在一起的方法,因此this在执行validateNumber后会失去意义。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:-1)

ES6引入了一项名为箭头功能的功能。除了语法比传统的function语法更简洁之外,它还保留了这种语境。基本上,您的代码可以更改为以下内容:

var promise = new Promise((resolve, reject) => {
      console.log(this); // MyClass
      resolve({});
});

您还需要在then

中保留上下文
this.validateNumber()
    .then(() => this.generateImage());