【发布时间】:2020-05-12 05:48:38
【问题描述】:
在我的ReactNative 应用程序中,我试图想出一个很好的模式来读取我存储在AsyncStorage 中的access_token 并在fetch 调用中使用它。
换句话说,我想创建一个使用某种类型的包装器的模式,以确保fetch 调用始终具有它需要的access_token。所以执行顺序应该总是:
调用 Fetch 调用 -> 从 AsyncStorage 和 Prep Header 获取令牌 -> 执行 Fetch 调用
我想出了以下代码,但看起来我在使用 AsyncStorage 的 Async 部分时遇到了问题,而且我的 fetch 呼叫在没有令牌的情况下发出。
这是我的fetch 电话:
export const someApiCall = (request) => {
const url = 'https://myapi.com/add';
return (dispatch) => fetch(url, fetchOptionsPost(request))
.then((response) => {
if (response.ok && response.status === 200) {
// Got data. Dispatch some action
}
})
}
在这里,我使用辅助函数来准备标题等。这是fetchOptionsPost() 的样子:
export const fetchOptionsPost = (request) => {
getAccessToken()
.then(token => {
return {
method: 'POST',
mode: 'cors',
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + token
},
body: JSON.stringify(request)
}
});
};
getAccessToken() 函数只是从AsyncStorage 读取它,如下所示:
export const getAccessToken = async () => {
return await AsyncStorage.getItem("access_token");
}
这种模式不起作用,API 调用在没有令牌的情况下发出。
我还想提一下,如果我在 fetchOptionsPost() 方法中对令牌进行硬编码,一切正常。显然,这里的问题是 fetchOptionsPost() 没有返回任何内容。
我能做些什么来确保我的fetchOptionsPost 中始终有我的令牌?
【问题讨论】:
-
您是否将访问令牌添加到 AsyncStorage 中?如果是这样,你在哪里设置?
-
我确实有一个单独的函数来处理保存令牌。我检查以确保令牌已存储,因此那里没有问题。问题似乎与代码流有关。 JavaScript 在执行
fetch调用之前根本不会等到检索到令牌。
标签: javascript react-native fetch asyncstorage