2017-10-30 4 views
0

私は、ログインが成功したかどうかに応じて警告を表示するログイン機能を持っています。まず第一に、私は変数を宣言し、フェッチを行った後、結果に依存して変数に値を与えます。フェッチ外の変数を取得する

フェッチが完了した後、この値に応じてアラートを表示します。 私の問題は、値がフェッチ後に定義されていないということです。

これは私のコードです。

onLogin(){ 
     var a; 
     fetch('http://xxxxx/user/login', { 
     method: 'POST', 
     headers: {'Content-Type': 'application/json'}, 
     body: JSON.stringify({ 
       username: this.username, 
       password: this.password 
       }) 
     }) 
     .then(function(response){ 
     if (response.status === 404){ 
     response.text().then(function(object){ 
      var a = "NO"; 
     }) 
     } else if (response.status === 200){ 
     response.text().then(function(object){ 
      var a = "OK"; 
     })} 
     }) 

     if (a == "OK"){ 
     Alert.alert(
      'Acceso', 
      'a', 
      [{ 
       text: 'Aceptar', 
       onPress: (this.aceptar.bind(this)) 
      }, 
      { 
       text: 'Cancelar', 
       onPress: (this.cancelar.bind(this)) 
      }] 

     )} 
     else if (a == "NO"{ 
      //something 

     } 

     } 
+0

fetchは非同期です。フェッチコールからの応答を受け取る前にアラートを表示しています。フェッチの結果に依存するコードは、フェッチの最後に '.then'の一部である必要があります。 – CRice

答えて

2

を宣言する再です。あなたは、変数a再宣言している

  1. .then()機能でキーワードvarを削除すると、それは、関数レベルで宣言し続けます)。
  2. fetchは非同期なので、aは、その値を呼び出しているときに定義されているとは限りません。

AあなたのonLogin関数にコールバック関数を渡すことであるために行く(とvar aを開始するための必要性を回避しているものを達成するために、わずかに良い方法

例:。

onLogin(callback) { 
    fetch('http://xxxxx/user/login', { 
     method: 'POST', 
     headers: {'Content-Type': 'application/json'}, 
     body: JSON.stringify({ 
      username: this.username, 
      password: this.password 
     }) 
    }) 
    .then(function(response) { 
     var successful = true; 
     if (response.status === 200) { 
      callback(successful); 
     } else { 
      callback(!successful); 
     } 
    }); 
}; 

onLogin(function (successful) { // call the onLogin and pass in a function as a callback 
    if (successful){ 
     Alert.alert(
      'Acceso', 
      'a', 
      [{ 
       text: 'Aceptar', 
       onPress: (this.aceptar.bind(this)) 
      }, 
      { 
       text: 'Cancelar', 
       onPress: (this.cancelar.bind(this)) 
      }] 
     ); 
    } else { 
     // not successful, do something else 
    } 
}); 
0

値をaに割り当てる時点では、基本的に値を割り当てる代わりに再宣言しています。 then()でvarキーワードを削除しても問題ありません。

0

あなたは二つの問題を持っている変数

onLogin(){ 
    var a; **Here you have declared the variable** 
    fetch('http://xxxxx/user/login', { 
    method: 'POST', 
    headers: {'Content-Type': 'application/json'}, 
    body: JSON.stringify({ 
      username: this.username, 
      password: this.password 
      }) 
    }) 
    .then(function(response){ 
    if (response.status === 404){ 
    response.text().then(function(object){ 
     //Here you are redeclaring it. just remove var 
     a = "NO"; 
    }) 
    } else if (response.status === 200){ 
    response.text().then(function(object){ 
     //Here too 
     a = "OK"; 
    })} 
    }) 

    if (a == "OK"){ 
    Alert.alert(
     'Acceso', 
     'a', 
     [{ 
      text: 'Aceptar', 
      onPress: (this.aceptar.bind(this)) 
     }, 
     { 
      text: 'Cancelar', 
      onPress: (this.cancelar.bind(this)) 
     }] 

    )} 
    else if (a == "NO"{ 
     //something 

    } 

    } 
関連する問題