注入可能なAngularサービスクラスがクラス変数を期待どおりに保存しないのはなぜですか?

マイケル・ハイン
  1. コンストラクターでは、console.log( "My ID is:")は、サーバーによって生成された正しいIDを出力します。
  2. getServerNotificationToken()では、this.userIDは「undefined」としてサーバーに返され、そのように出力されます。

クラスが変数をクラスに保存しないのはなぜですか?ES6 javascriptについての私の理解は、 'this'キーワードは、使用されている関数に関係なく、クラス自体にバインドされているということです。

ありがとう!

@Injectable({
  providedIn: 'root'
})
export class GamestateService {
  public socket: any;
  public userID: number;

  constructor(private firebaseMessaging: FirebaseMessaging, public navCtrl:NavController) {
    this.socket = io('http://192.168.1.3:3001');
    this.socket.on('push-client-id', (data) => {
      this.userID = data.id;
      console.log("My ID is:", this.userID);
    })
    this.getServerNotificationToken();
  }

  getID():number {
    return this.userID;
  }

  getServerNotificationToken() {
    console.log("In firebase messaging...");
    this.firebaseMessaging.getToken().then((token) => {
      console.log("Token received: ", token);
      let tokenResponseObj = {
        token,
        userId: this.userID
      }
      console.log("My user id:", this.userID);
      console.log("tokenResponseObj.userId:", tokenResponseObj.userId);
      console.log("tokenResponseObj.token:", tokenResponseObj.token);
      this.socket.emit('token-received', tokenResponseObj);
    });
  }
}

予期されるもの:サーバーによって割り当てられたuserID#結果:未定義

エイドリアンブランド

ES6矢印関数のみが常に定義されているクラスにバインドされ、通常の関数ではなく、呼び出し元のクラスにバインドされます。

ソケットコールバック関数の外部でgetServerNotificationTokenを呼び出しているため、コールバック関数が実行される前に実行されている可能性があります。したがって、userIDはまだ設定されています。getServerNotificationToken呼び出しをコールバック関数に入れると、呼び出される前にuserIDが設定されていることが保証されます。

this.socket.on('push-client-id', (data) => {
  this.userID = data.id;
  console.log("My ID is:", this.userID);
  this.getServerNotificationToken();
})

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Spring @Configurationクラスの継承が期待どおりに機能しないのはなぜですか?

分類Dev

否定された文字クラスが期待どおりに機能しないのはなぜですか?

分類Dev

クラスが期待どおりに追加および削除されないのはなぜですか?

分類Dev

`std :: exit`がデストラクタを期待どおりにトリガーしないのはなぜですか?

分類Dev

テンプレート領域が期待どおりにスタックしないのはなぜですか?

分類Dev

ブラケットベースの-Filter引数を使用すると、$ PSItemが期待どおりに動作しないのはなぜですか?

分類Dev

サブクラス変数が存在しないのはなぜですか?

分類Dev

Safariでスクロールベースのビデオが期待どおりに機能するのに、他のブラウザでは機能しないのはなぜですか?

分類Dev

私のハムクレストが期待どおりに機能しないのはなぜですか?

分類Dev

サブクラスがスーパークラス変数の値をオーバーライドしないのはなぜですか?

分類Dev

Cマトリックスが期待どおりに機能しないのはなぜですか?

分類Dev

変数を使用したブレース展開が期待どおりに機能しないのはなぜですか?

分類Dev

NodeJSでこのエクスポートされた関数が期待どおりに機能しないのはなぜですか?

分類Dev

scalaの暗黙的なクラスが期待どおりに出力を表示しない

分類Dev

Python 3.7データクラスが<> <=および> =をサポートしないのはなぜですか?

分類Dev

numpyndarrayのサブクラスが期待どおりに機能しない

分類Dev

Javascriptクラスコンストラクターがクラス変数を期待どおりに設定しない

分類Dev

`dd conv = sparse`が期待どおりにスペースを節約しなかったのはなぜですか?

分類Dev

PHPサービスが変数を取得しないのはなぜですか?

分類Dev

私のサービスはデータをコントローラーに返していますが、期待どおりにアクセスできないようです。

分類Dev

Javaがここで変数ではなくクラスを期待するのはなぜですか?

分類Dev

BigQueryのcaseステートメントが期待どおりに動作しないのはなぜですか?

分類Dev

Listから継承されたクラスでMe(index)を呼び出し、カスタムインデクサーが期待どおりに機能しない

分類Dev

スーパークラスの参照変数を使用して、そのサブクラスのメソッドにアクセスできないのはなぜですか (メソッドはスーパークラスでは使用できません)?

分類Dev

JavaScriptのドラッグサイズ変更ボックスが期待どおりに機能しない理由

分類Dev

ifステートメントが期待どおりに動作しないのはなぜですか?

分類Dev

ステートメントが期待どおりに機能しないのはなぜですか?

分類Dev

「this」とは異なり、「super」がクラスインスタンスではなく親クラスを参照しているにもかかわらず、静的コンテキストから「super」変数を使用できないのはなぜですか?

分類Dev

クラス変数_xが増加しないのはなぜですか?

Related 関連記事

  1. 1

    Spring @Configurationクラスの継承が期待どおりに機能しないのはなぜですか?

  2. 2

    否定された文字クラスが期待どおりに機能しないのはなぜですか?

  3. 3

    クラスが期待どおりに追加および削除されないのはなぜですか?

  4. 4

    `std :: exit`がデストラクタを期待どおりにトリガーしないのはなぜですか?

  5. 5

    テンプレート領域が期待どおりにスタックしないのはなぜですか?

  6. 6

    ブラケットベースの-Filter引数を使用すると、$ PSItemが期待どおりに動作しないのはなぜですか?

  7. 7

    サブクラス変数が存在しないのはなぜですか?

  8. 8

    Safariでスクロールベースのビデオが期待どおりに機能するのに、他のブラウザでは機能しないのはなぜですか?

  9. 9

    私のハムクレストが期待どおりに機能しないのはなぜですか?

  10. 10

    サブクラスがスーパークラス変数の値をオーバーライドしないのはなぜですか?

  11. 11

    Cマトリックスが期待どおりに機能しないのはなぜですか?

  12. 12

    変数を使用したブレース展開が期待どおりに機能しないのはなぜですか?

  13. 13

    NodeJSでこのエクスポートされた関数が期待どおりに機能しないのはなぜですか?

  14. 14

    scalaの暗黙的なクラスが期待どおりに出力を表示しない

  15. 15

    Python 3.7データクラスが<> <=および> =をサポートしないのはなぜですか?

  16. 16

    numpyndarrayのサブクラスが期待どおりに機能しない

  17. 17

    Javascriptクラスコンストラクターがクラス変数を期待どおりに設定しない

  18. 18

    `dd conv = sparse`が期待どおりにスペースを節約しなかったのはなぜですか?

  19. 19

    PHPサービスが変数を取得しないのはなぜですか?

  20. 20

    私のサービスはデータをコントローラーに返していますが、期待どおりにアクセスできないようです。

  21. 21

    Javaがここで変数ではなくクラスを期待するのはなぜですか?

  22. 22

    BigQueryのcaseステートメントが期待どおりに動作しないのはなぜですか?

  23. 23

    Listから継承されたクラスでMe(index)を呼び出し、カスタムインデクサーが期待どおりに機能しない

  24. 24

    スーパークラスの参照変数を使用して、そのサブクラスのメソッドにアクセスできないのはなぜですか (メソッドはスーパークラスでは使用できません)?

  25. 25

    JavaScriptのドラッグサイズ変更ボックスが期待どおりに機能しない理由

  26. 26

    ifステートメントが期待どおりに動作しないのはなぜですか?

  27. 27

    ステートメントが期待どおりに機能しないのはなぜですか?

  28. 28

    「this」とは異なり、「super」がクラスインスタンスではなく親クラスを参照しているにもかかわらず、静的コンテキストから「super」変数を使用できないのはなぜですか?

  29. 29

    クラス変数_xが増加しないのはなぜですか?

ホットタグ

アーカイブ