javascript - 来自 getter 的 React Native 返回函数
问题描述
我正在制作一个存储一些本地数据的应用程序,例如身份验证令牌。当应用程序关闭时,这些数据会被清除,所以我想将它移动到 AsyncStorage 中。
以前是这样的:
let LocalData = {
token: '',
name: '',
otherStuff: '',
moreStuff: '',
};
export default LocalData;
我像访问它一样LocalData.name = 'John';
所以基本上我已经重构了代码,以便我的本地数据类是 AsyncStorage 的包装器。
看这里:
class LocalData {
setObjectForKey = async (key, value) => {
if (!key) throw new Error('Cannot set an value (' + value + ') without a key');
return await AsyncStorage.setItem(key, value)
};
setToken(token) {
this.setObjectForKey(KEY_TOKEN, token)
}
token = async () => {
try {
let item = await AsyncStorage.getItem(KEY_TOKEN);
if (item === null) { return 'N/A'; }
return item;
} catch (error) {
console.log('Error fetching token', error);
}
}
}
export default LocalData;
我想以这种方式存储大约 10 件物品。这是其中之一的示例。
然后我这样称呼它:
var localData = new LocalData();
doSomething(localData.token);
或者如果我设置值,我会这样做:
var localData = new LocalData();
localData.setToken(someToken);
这是我的第一个 React Native 应用程序,所以我认为我的问题是我不知道正确的语法。
有人可以指出我在这里出错的方向吗?
我的目标是开设一个包含 getter 和 setter 的基础课程。
谢谢。
解决方案
看起来这是你的问题:
var localData = new LocalData();
doSomething(localData.token); // << This line
我假设您正在尝试将令牌的值传递给“doSomething”函数。上面的代码没有这样做,它传递了对令牌函数的引用。
在您的类中,它是一个异步方法,它返回一个承诺,因此要访问您需要使用 async/await 或 Promise API 的令牌:
异步/等待
async function foo () {
let localData = new LocalData();
try {
// Use await to await the promise resolving with the token
let token = await localData.token();
} catch (e) {
console.log("Error", e);
}
}
承诺接口
function foo () {
let localData = new LocalData();
localData.token()
.then(doSomething)
.catch(function (e) {
console.log("Error", e);
});
}
概括
您得到一个函数是因为您没有调用该函数,而是使用对该函数的引用作为值,而不是调用该函数来获取返回值。
推荐阅读
- c - 如何在 C 编程语言中的字符串中我需要的位置插入一个数字
- ios - Apple Fitness -> 地图并不总是显示
- python - 如何仅通过现有组合为数据框创建循环,并且在 Python Pandas 中仅组合一次?
- f# - 有没有“让!”的替代品?支持函数链?
- python - 无法打印名称和价格
- android - react-native-iap 中的 Android 收据验证问题
- docker - 来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:370:权限被拒绝:未知
- bash - Bash:通过管道进行进程的相互交互
- javascript - 如何触发块的重新渲染?
- xslt - 如何将 SOAP 标头添加到肥皂消息 - XSLT