我是一个非常新的反应原生,可能是完全错误的做法。 正如反应原生文档所建议的,我正在使用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。但它恰好相反。
On进一步的诊断我发现函数authKeyExists
在promise对象内的代码执行之前就会返回。
我已经看过几个例子,但他们都在Screen组件本身上使用了AsyncStorage(我也尝试过这个例子并且失败了)。我想通过使用我的存储类来抽象出AsyncStorage。请告诉我错误的地方。
答案 0 :(得分:0)
你的函数authKeyExists()将始终返回true ... promise中的函数异步运行并且在返回keyExists后实际触发,因此设置keyExists的逻辑中没有任何逻辑会产生任何影响。如果要使用承诺中的值,则需要使用回调:
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
});