gpt4 book ai didi

json - AsyncStorage.setItem 返回 null(等待获取完成)

转载 作者:行者123 更新时间:2023-12-04 12:40:50 26 4
gpt4 key购买 nike

通过获取,我从服务器获取了 JWT。收到这个 JWT,因为当我执行 console.log(resData.token) 时, token 会显示在控制台中。但是我无法将 token 保存在异步存储中。响应是这样的:

{“_40”:0,“_55”:空,“_65”:0,“_72”:空

我认为当 asynstorage.setItem 运行时获取尚未完成,但我如何才能等待它先完成?

import React, { useState } from 'react';
import { Text, TextInput, Button, SafeAreaView } from 'react-native';

import AsyncStorage from '@react-native-community/async-storage';

const SignInScreen = props => {
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
const SignInHandler = async () => {
const req = await fetch('http://localhost:8080/auth/signin', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({username: username, password: password})
});
const res = await req;
if (res.ok) {
const resData = await res.json();
console.log(resData.token); // this works!
await AsyncStorage.setItem('token', JSON.stringify(resData.token));
console.log(AsyncStorage.getItem('token')); // this does not work
} else {
console.log('no user found');
};
};
return (
<SafeAreaView>
<Text>Username</Text>
<TextInput value={username} onChangeText={username => setUsername(username)} />
<Text>Password</Text>
<TextInput value={password} onChangeText={password => setPassword(password)} />
<Button title="Sign In" onPress={SignInHandler} />
</SafeAreaView>
);
};

SignInScreen.navigationOptions = navigation => ({
headerShown: false
});

export default SignInScreen;

最佳答案

AsyncStorage 中的方法是异步的。你可以这样使用它:

console.log(await AsyncStorage.getItem('token'));

您可以找到更多信息 here in the doc

关于json - AsyncStorage.setItem 返回 null(等待获取完成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59239313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com