【问题标题】:Remove item from async storage not working从异步存储中删除项目不起作用
【发布时间】:2019-04-04 12:13:57
【问题描述】:

我在退出屏幕中有以下代码

 await AsyncStorage.removeItem('userToken').then(()=>{
      setTimeout(() => {
        this.props.navigation.navigate('SignIn');
      }, 3000);

在启动画面上我是这样检查的

const userToken = AsyncStorage.getItem('userToken').then(() => {
        this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
    });

注销后它重定向到登录,但是当我再次打开应用程序时,闪屏会移动到应用程序而不是登录

我的初始代码是这样的

const userToken = AsyncStorage.getItem('userToken'), this.props.navigation.navigate(userToken ? 'App' : 'SignIn'); 

我做错了什么。 请指教。

谢谢

【问题讨论】:

  • 只要你使用await ...就不需要then
  • 是的,无论如何我都在尝试执行它

标签: react-native react-native-android asyncstorage


【解决方案1】:

你检查异步数据结果了吗?

例如:

在初始屏幕上

AsyncStorage.getItem("userToken").then(value => {
      if(value) {
       let token = JSON.parse(value);
       this.props.navigation.navigate(token ? 'App' : 'SignIn');
      } else {
       this.props.navigation.navigate('SignIn');
      }
    });

【讨论】:

  • 我不需要数据结果
  • 好的,但是你可以检查它是否出现。根据此状态,您可以导航。
  • 让它未定义
【解决方案2】:

你忘记了回调的参数,

const userToken = AsyncStorage.getItem('userToken').then((userToken) => {
        this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
    });

【讨论】:

  • 真的需要吗,如果我不需要对 userToken 做任何事情
  • 那你要怎么检查?返回值未定义或其中包含字符串?
  • 我的实际代码是 const userToken = AsyncStorage.getItem('userToken'), this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
  • 所以它是未定义的,所以它应该重定向到登录
  • 是的,现在你来对地方了,让它等待它会起作用。
【解决方案3】:

请检查文件AndroidManifest.xml 并将android:allwoBackup=ture 更改为android:allwoBackup=false。希望这会奏效。当备份为真时,它总是备份登录信息。

【讨论】:

    【解决方案4】:

    如果有人仍然困惑或在这里找到解决方案

    那么这里是解决方案:

    const userToken = await AsyncStorage.getItem('userToken').then(() => {
        this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
    });
    

    当您从 AsyncStorage 获取键的值时,只需添加 await

    顺便说一句,我也遇到了这个问题。

    【讨论】:

      【解决方案5】:

      我已经实现了类似的功能

      async logout() {
          await AsyncStorage.clear();
          Actions.SignIn(); // for navigating back to sign in screen if using router flux
          this.props.navigation.navigate("SignIn"); // if using react-navigation
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-26
        • 1970-01-01
        相关资源
        最近更新 更多