首页 > 解决方案 > 来自 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 的基础课程。

谢谢。

标签: javascriptreactjsreact-native

解决方案


看起来这是你的问题:

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);
        });
}

概括

您得到一个函数是因为您没有调用该函数,而是使用对该函数的引用作为值,而不是调用该函数来获取返回值。


推荐阅读