2017-07-03 3 views
0

Ich versuche zu überprüfen, ob ein Benutzer authentifiziert ist. Ich tue dies, indem Sie einige Rekord in asyncStorage Überprüfung, ich habe den folgenden CodeAuflösen einer AsyncStorage-Zusage in "componendidmount"

App.js

let AuthService = require('./app/layouts/AuthService/AuthService.js'); 
export default class App extends React.Component { 

    componentDidMount() { 
     AuthService.getAuthInfo((err, authInfo) => { 
      this.setState({ 
       checkingAuth: false, 
       isLoggedIn: authInfo != null 
      }) 
     }); 
    } 
} 

Auth.js

'use strict'; 

let AsyncStorage = require('react-native').AsyncStorage; 
let _ = require('lodash'); 

const authKey = 'auth'; 
const userKey = 'user'; 

class AuthService { 
    getAuthInfo(cb){ 
     AsyncStorage.multiGet([authKey, userKey], (err, val)=> { 
      if(err){ 
       return cb(err); 
      } 
      if(!val){ 
       return cb(); 
      } 
      let zippedObj = _.zipObject(val); 
      if(!zippedObj[authKey]){ 
       return cb(); 
      } 
      let authInfo = { 
       header: { 
        Authorization: 'Basic ' + zippedObj[authKey] 
       }, 
       user: JSON.parse(zippedObj[userKey]) 
      } 
      return cb(null, authInfo); 
     }); 
    } 
} 
module.exports = new AuthService(); 

In app.js, ich versuche zu verwenden, Diese Funktion von Auth.js, aber ich bekomme keine Antwort von der Funktion, ich bekomme Konsolenprotokolle von getAuthInfo, bevor ich in die AsyncStorage-Funktion komme. Ich bin ziemlich neu zu reagieren native und ES6, und ich denke, ist ein Versprechen oder async Problem, aber ich kann es nicht funktionieren. In App.js readering ein ActivityIndicator, also blockiere ich die UI nicht mit checkingAuth und isLoggedIn. Ich habe versucht, einige .then in app.js ohne Ergebnisse zu verwenden.

Antwort

0

Zuerst geben Sie Ihre Rückruffunktion zurück, anstatt sie aufzurufen. Versuchen Sie es zu nennen, indem Sie return wie folgt entfernen: cb(null, authInfo);.

+0

danke! das hat funktioniert –

Verwandte Themen