1

我对本机反应非常陌生,可能完全错误。正如反应本机文档所建议的那样,我正在为我的 AsyncStorage 使用包装器。我在做什么:

  1. 我有一个名为 Storage 的类,它用作 AsyncStorage 代码的包装器:

    'use strict';
    var React = require('react-native');
    var {
        AsyncStorage
    } =React;
    
    module.exports={
        store(key,value)
        {
            AsyncStorage.setItem(key,value);
        },
        get(key)
        {
            return AsyncStorage.getItem(key);
        },
    }
    
  2. 另一个类 Auth 使用密钥 auth (已保存)代码查找值:

    'use strict';
    var React = require('react-native');
    
    var Storage=require('./Storage');
    module.exports={
        authKeyExists()
        {
          console.log("IntelliSpend: In Auth::authKeyExists");
          var authKeyPromise=Storage.get('auth');
          var keyExists=true;      
          authKeyPromise.then((authKey)=>{
              console.log('Authkey:'+authKey);
              if(authKey){
                console.log('Authkey exists');
                keyExists= true;
              }
              else {
                console.log('Authkey does not exists');
                keyExists= false;
              }
          }).done();      
          return keyExists;
        }    
    }
    

理想情况下,密钥“auth”的值存在,因此它应该打印“Authkey exists”并且应该将 keyExists 返回为 true。但它恰恰相反。

在进一步诊断中,我发现函数authKeyExists在 promise 对象内的代码执行之前就返回了。

我看过几个示例,但它们都在 Screen 组件本身上使用 AsyncStorage(我也尝试过但失败了)。我想通过使用我的存储类来抽象出 AsyncStorage。请让我知道我在哪里弄错了。

4

1 回答 1

1

您的函数 authKeyExists() 将始终返回 true...promise 中的函数异步运行,并且实际上会在返回 keyExists 后触发,因此其中设置 keyExists 的任何逻辑都不会产生任何影响。如果你想使用 Promise 中的值,你需要使用回调:

authKeyExists(callback)
{
  var keyExists;
  var authKeyPromise=Storage.get('auth');
  authKeyPromise.then((authKey)=>{

      if(authKey){
        keyExists= true;
      }
      else {
        keyExists= false;
      }

      callback(keyExists);

  }).done();      
}    

然后您可以像这样使用它:

Auth.authKeyExists( (keyExists)=> {

   // do something with keyExists

});
于 2016-06-23T10:19:26.253 回答