【发布时间】:2016-06-22 12:18:09
【问题描述】:
我对 react native 很陌生,可能完全错了。 正如反应本机文档所建议的那样,我正在为我的 AsyncStorage 使用包装器。 我在做什么:
-
我有一个名为 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); }, } -
另一个类 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。请让我知道我在哪里弄错了。
【问题讨论】:
-
您的函数 authKeyExists() 将始终返回 true...promise 中的函数异步运行,并且实际上会在
return keyExists之后触发,因此其中设置 keyExists 的任何逻辑都不会产生任何影响。您需要使用回调 -
我接受你的评论作为答案
-
你明白我说的一切吗?如果您愿意,我可以在答案中详细说明。
标签: javascript react-native asyncstorage