問題
サンプル
class Sample {
constructor() {
this.some = 10;
}
Start() {
Promise.resolve()
.then(this.TaskA)
.then(this.TaskB)
.then(this.TaskC)
.catch((e) => console.log(e));
}
TaskA() {
return new Promise((resolve, reject) => {
resolve(Math.random());
});
}
TaskB(number) {
return new Promise((resolve, reject) => {
resolve(this.some * number);
});
}
TaskC(number) {
return new Promise((resolve, reject) => {
console.log(number);
resolve();
});
}
}
const s = new Sample();
s.Start();
TypeError: Cannot read property 'some' of undefined
とかなる。thisが参照できてないのでメンバ変数が見えてない。
解決
https://stackoverflow.com/questions/35481367/the-this-object-is-undefined-when-using-promise を参考に解決すると
Start() {
Promise.resolve()
.then(this.TaskA)
.then(this.TaskB.bind(this))
.then(this.TaskC)
.catch((e) => console.log(e));
}
this参照したい箇所はbindでthisを束縛する。answer内の Promise.bind(this)
でやってみる方は解決しなかった。
Typescriptで記述してるときは、 Promise.bind(this)
で始めたとしてもメソッドの方は関数型の変数に変えると動いた。
TaskB = (number) => {
return new Promise((resolve, reject) => {
resolve(this.some * number);
});
}