私はES6でいくつかのノードコードを書いています。私のコードでは、次のようなクラスがあります。これは、問題を切り分けて表示するための基本的な例です。JavaScript - チェーン付き約束で "this"を使用する
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?
}
}
このクラスでは、コンストラクタで乱数を生成することに気付くでしょう。そのクラスのメソッド全体でその番号を使用できるようにしたい。しかし、私は連鎖が約束する一つの方法を持っているので、validateNumber
が実行された後にはthis
が意味を失うようです。
私はこれをどのように解決するのですか?
内部のコンテキストを保持する必要がありますか? – Bergi
いいえ、generateImageをインスタンスにバインドせずに 'then'に渡すと意味が失われます。 – Bergi
@Bergi ...あなたは正しいです。今更新する。 – user70192