2016-08-21 7 views
0

今すぐユーザーのログインが成功したらユーザートークンを保存します。React Native Get Async Storageリターン未処理約束

onPress(){ 
    return axios.post('https://api.example.net/v1/user/auth/login', { 
    email: this.state.email, 
    password: this.state.password, 
    }, { 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
    }, 
    }).then((response) => { 
    AsyncStorage.setItem('token', response.data.login._cxz,() => { 
     console.log('success'); 
    }); 
    this.props.navigator.immediatelyResetRouteStack([{name: 'tweets'}]); 
    }) 
    .catch((error) => { 
     this.setState({errorMessage: error.response.data.message}); 
    }); 
} 

私はすでにresponse.data.login._cxzが値を持っていることを確認してください:

は、ここに私のコードです。 ここまで作業しています。ログインするとtweetsルートにリダイレクトされます。私tweets.jsで

constructor(props){ 
    super(props); 
    this.state({token : ''}); 
    } 
    componentWillMount() { 
    AsyncStorage.getItem('token', (err, value) => { 

     console.log(value); 
    }) 
    } 

私だけのシンプルなconsole.logトークンが保存されているかどうか、それが表示します。 しかし、ログインが完了するたびに(成功のログが表示されます)。

error

どれソリューションを:私のつぶやきを入力するとき、私はいつもこのエラーを得ましたか。

ありがとうございました。

答えて

1

は何最も可能性が起きていることはthenコールバックがnavigator.immediatelyResetRouteStackでエラーを投げているということです。

.then((response) => { 
    AsyncStorage.setItem('token', response.data.login._cxz,() => { 
    console.log('success'); 
    }); 
    this.props.navigator.immediatelyResetRouteStack([{name: 'tweets'}]); 
}) 
.catch((error) => { 
    this.setState({errorMessage: error.response.data.message}); 
}); 

エラーが続いcatchブロックでキャッチされますが、エラーは、通常のJavaScript Errorとではありませんので、 axiosエラーでは、responseプロパティがないため、error.response.dataにアクセスしようとすると、定義されていないエラーが発生します。

エラーの種類を検出する簡単な方法は、それがアヒル型にある:エラーがresponseを持っている場合、それはaxiosエラー、そうでない場合は別のエラーです:

.catch((error) => { 
    if (error.response && error.response.data) { 
    this.setState({errorMessage: error.response.data.message}); 
    } else { 
    this.setState({errorMessage: error.message}); 
    } 
}); 

immediatelyResetRouteStackに起因する誤差があります同じ呼び出しスタック上で同期的に実行されるReactレンダーパスからのものである可能性があります。あなたが壊れた.catchを修正するとエラーメッセージが何であるかがわかりますが、あなたの限られたサンプルコードで犯人のために良いの推測では、次のとおりです。

代わりに、メソッド呼び出しのプロパティの割り当て、あるべき
this.state({token : ''}); 

this.state = {token : ''}; 
+0

まあまあです。私は 'catch 'とそのすべてが正常に動作するようにしようとしていますが、' this.state = {token:' '} 'を修正した後は正しく動作します。ありがとう! – ssuhat

関連する問題