promiseというのは、JavaScriptで非同期処理(ネットワーク上やディスク上にあるファイルにアクセスするときなど、処理中にIO待ちが発生するような処理を行う際に、IO待ちの間でも別の処理を行うことで、処理を高速化することができるような仕組みを提供する機能)を実現するための機能です。
なので、Promiseを理解するためにはまず非同期処理とはなんなのか?を理解する必要があります。
すごく雑に理解するのであれば、マルチスレッド処理のように複数の処理を同時並行で走らせることができる。ぐらいに思っておくと良いかもしれません。
(ただし、JavaScriptの非同期処理はシングルスレッドで実行されるので、マルチスレッド処理(並列処理)とは違います。が、実際に動かしてみると、他の言語などでマルチスレッドでコードを実行したときと似た動きになるので、とりあえずに理解の入り口としてはまあ良いかなと思っています)
JavaScriptのPromiseやasync/awaitに関しては以下のURLがとても詳しいので、時間があれば読んでみると良いかと思います
Promiseの本
とはいえ、上記の勉強をしていると日が暮れてしまうと思うので、とりあえず提示されているコードを動かす上でのポイントだけ説明すると、
- Promiseを返す関数(ここでは、
this.cls.getAxios()
とax.get()
)が呼び出された場合、呼び出し元ではその関数の終了(「Promiseがresolve(解決)される」とか言ったりします)を待たずに次の行が実行される
- Promise関数はPromiseObjectというのを返す。このObjectに
then()
節をつけたりすることで、Promise関数が解決した後の値を取り出したりすることができる
- もしもPromise関数が解決するまで次の行に進みたくない場合は
await
をつけることができる。await
をつけた場合はPromise関数が解決した後に返ってくる値をそのまま取得する事ができる
ぐらいでしょうか?
なので、以下のようにax.get()
関数の前にawait
をつけてあげると意図通りに動くと思います
async getRepository($USERNAME: string,$TOKEN: string) {
var ax = await this.cls.getAxios();
var rax = await ax.get("/users/"+$USERNAME+"/repos?access_token=" + $TOKEN);
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。