Welcome

カキノタblog

自分の興味あるテーマを中心に、図解多めに記事を作成していきたいと思います。

JavaScript Uncaught (in promise) TypeError: this.* is not a function

promiseを使用してthen()でクラスメソッドを使おうとしたら

Uncaught (in promise) TypeError: this.* is not a function

というエラーが出ました。

console.log()でthisを見てみるとthisはwindowでした。

thisはメソッドが呼び出されるオブジェクトを指しますが、then()は明示的にcallしたわけではないのでwindowがthisとなってしまうようです。

thisを保存したい場合は、

.then(() => this.method2())

var that = this;
// ...
.then(function() { that.method2() })

のようにすることでthen()内でクラスメソッドを使用することができるようになりました。

参考リンク