Angular http.get() の中でPromiseが使えたかったときの対処法

「Angular http.get() の中でPromiseが使えたかったときの対処法」のアイキャッチ画像

serviceの中でログインしたか確認した後に、そのユーザーに紐づいている会社情報を取得する
というメソッドの中でPromiseを利用して、会社情報が取得できたら次に行くという
メソッド作成中ハマったのでシェアします

// 修正前
checkAccessToken(): Promise<boolean> {
       const access_token = localStorage.getItem("access_token");
       if (access_token) {
          // ここで return new Promise()  で囲んだがPromiseに入って行かずに実行されない状態が発生
           return this.http.get(`${config.oauth_api}/user_info`, this.getAuthRequestOptions())
               .pipe(map(response => response))
               .pipe(map(response => {
                   this.find_one_with_user_id().then((res: Company) => {
                       this.company = res;
                   });
                   return true;
               })).toPromise();
       }
       return Promise.reject(false);
   }

// 修正後
checkAccessToken(): Promise<boolean> {
       const access_token = localStorage.getItem("access_token");
       if (access_token) {
           // Promiseの追加
           return new Promise((resolve, reject) => {
               this.http.get(`${config.oauth_api}/user_info`, this.getAuthRequestOptions())
                   .pipe(map(response => response))
                     // .pipe(map())ではなく、subscribe()を利用することで中身が発火するようになった
                   .subscribe(response => {
                       this.find_one_with_user_id().then((res: Company) => {
                           this.company = res;
                           resolve(true);
                       }, () => {
                           reject(false);
                       });
                   });
           });
       }
       return Promise.reject(false);
   }


 

時間がないのでなぜ解決することができたかをここで詳しく述べることができないのですが、
この修正を行うことでコードは無事に動きました

なぜ解決することができたかわかる方がいらっしゃいましたら教えていただけると幸いです(__)

 

 

目次
  1. 参考記事

参考記事