Javascript 如何使用asyncStorage从本地存储获取值并返回它

Javascript 如何使用asyncStorage从本地存储获取值并返回它,javascript,react-native,asynchronous,asyncstorage,Javascript,React Native,Asynchronous,Asyncstorage,我想创建一个方法,从本地存储中存储的令牌返回一个auth头,这样就可以从许多ajax调用它,如下所示: const fetchUserInfo = (username) => { const requestString = apiBaseURL + 'access/user_info/' const form = {username: username} return axios.post(requestString, form, getAuthHeader()) .

我想创建一个方法,从本地存储中存储的令牌返回一个auth头,这样就可以从许多ajax调用它,如下所示:

const fetchUserInfo = (username) => {
  const requestString = apiBaseURL + 'access/user_info/'
  const form = {username: username}

  return axios.post(requestString, form, getAuthHeader())
    .then((Response) => {
      return {
        userInfo: Response.data,
        message: null
      }
    })
    .catch((Error) => {
      return getErrorMessage();
    });
}
在这种情况下,
getAuthHeader()
是一种必须从本地存储中存储的令牌返回正确授权头的方法,因此它必须使用
asyncStorage
来检索该令牌

这是
getAuthHeader
的代码:

export const getAuthHeader = async () => {
  return await AsyncStorage.getItem('token')
    .then ((token) => {
      return {
        headers: {'Authorization' : 'Token ' + token}
      }
    })
    .catch ((error) => null)
}

问题是
getAuthHeader()
返回的不是头,而是其他对象。我相信我弄乱了
异步存储的异步特性,但我不知道如何获得所需的值。

是的,您正在使用
异步/wait
。然后一起使用
(本机)
async/await
已经处理了
。然后
就可以为您处理语法,而无需您这么做。所以你不需要两者同时存在,要么是1,要么是另一个。下面两个例子

异步/等待:

export const getAuthHeader = async () => {
  try {
    const token = await AsyncStorage.getItem('token')
    if (!token) { return null }
    return {
        headers: {'Authorization' : 'Token ' + token}
      }
  } catch(error) { return null }

}
土生土长的

export const getAuthHeader = () => {
  return AsyncStorage.getItem('token')
    .then((token) => {
      if (!token) { return null }
      return {
        headers: {'Authorization' : 'Token ' + token}
      }
    })
    .catch ((error) => null)
}
您还需要在第一个方法中等待
getAuthHeader
,否则它将永远无法解析该值:

const fetchUserInfo = async (username) => {
  const requestString = apiBaseURL + 'access/user_info/'
  const form = {username: username}
   
  try {
    const response = await axios.post(requestString, form, await getAuthHeader())
    return {
        userInfo: response.data,
        message: null
    }
  } catch(error) {
    return getErrorMessage();
  }
}

它不起作用。我可以看到
AsyncStorage
检索正确的值,但是在调用方法中,
getAuthHeader
接收的不是头,而是另一个对象。我怀疑这是一个承诺,但我不知道如何找到它,如果是的话,如何解决它。答案编辑@huluvigate问题是,那么,
fetchUserInfo()
将成为一个承诺,调用它的方法也需要成为
async
,这是不可能的。要做你想做的事情,它必须成为一个承诺。除非您不使用异步存储。如果我需要一个持久本地存储,我可以用什么来代替呢?
.catch((error)=>null)
。这样的代码会把你带进一个兔子洞,你可能永远也回不来了。