我正在使用AsyncStorage在React Native应用上进行简单身份验证以保留令牌。在获取之后,我需要调用AsyncStorage来保存我收到的令牌。我正在寻求建议:最佳实践方法是什么?
function login(username, password) {
const requestOptions = {
"method": "POST",
"headers": { "Content-Type": "application/json" },
"body": JSON.stringify({ username, password })
};
return fetch(`${BASE_URL}/authenticate`, requestOptions)
.then(response => {
return response.json();
})
.then(res => {
AsyncStorage.setItem("@Storage:key", user.token).then();//doing smth);
return res;
});
}
答案 0 :(得分:3)
您将等待所有异步请求
async function login(username, password) {
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
}
const res = await fetch(`${BASE_URL}/authenticate`, requestOptions)
const response = await response.json();
await AsyncStorage.setItem('@Storage:key', user.token)
return response.msg
}
答案 1 :(得分:0)
一般来说,链接Promises是最干净的方式之一。例如,像:
return fetch(url)
.then(res => res.json())
.then(res => AsyncStorage.setItem('key', token).then(res => res.msg));
你怎么拥有它。
如果您可以使用Babel进行转换,使用async/await
可以使其更好:
const res = await (await fetch(url)).json();
await AsyncStorage.setItem('key', token);
使用await
和async
,只要您await
上的Promise
,就可以将其视为与非异步代码相同。