当我从AsyncStorage获取数据时,它不会等待显示
在获取值之前返回值。
我不能在函数上使用异步等待。如果是这样,它将无法编译。
我今天整天都在搜索,但找不到答案。
我如何解决这个简单但对我来说很复杂的问题?
反应码
import random
def user_guess_validation():
guess = input('Enter your guess. Numbers seperated by a space: ')
x = guess.split() #splitting input and creating a list
if len(x) == 4: # making sure input lenght is 4
lst = []
for each in x:
if each.isdigit() == True and int(each) in range(1,10): #checking if item in list is actually a number between 1 and 9
lst.append(int(each))
print('1, the lst here is', lst)
continue
else:
print("1 Sorry, that's an invalid entry. Your guess must be 4 UNIQUE digits seperated by space.")
user_guess_validation()
for i in range(4): # checking if each input is unique
for j in range(i+1,4):
print('2, the lst here is', lst)
if lst[i] == lst[j]:
print('index of i and j is: ',lst[i],lst[j])
print("2 Sorry, that's an invalid entry. Your guess must be 4 UNIQUE digits seperated by space.")
user_guess_validation()
print('3, the lst here is', lst)
else:
print("3 Sorry, that's an invalid entry. Your guess must be 4 UNIQUE digits seperated by space.")
user_guess_validation()
def main():
secret_code = random.sample(range(1,10),4)
print(secret_code)
validated_guess = user_guess_validation()
print(validated_guess)
if validated_guess == secret_code:
print('Correct!')
else:
print('Wrong! Try again.')
user_guess_validation()
main()
答案 0 :(得分:1)
(免责声明-我熟悉React的网络版本,但我猜想这些模式在React-native方面如果不相同,则是相似的。)
您正在尝试在同步操作(DisplayUsername
)中执行异步操作(render
)。 React不允许渲染异步。您的呈现函数始终需要返回React可以理解的内容(UI元素或空值,例如null
或空数组)。
这意味着您的组件具有两种状态:一种状态尚不知道用户名是什么,以及一种状态已完成使用AsyncStorage
并且知道用户名。这表明您可以使用react state
来保存用户名数据。
在React中获取外部数据的“标准”方法是使用组件的componentDidUpdate
方法(在组件首次呈现后触发)或带有功能组件的useEffect
钩子(每次渲染后都会触发)。这就是您要实现的:
AsyncStorage
异步获取用户名以下是使用功能组件实现这些步骤的伪代码:
export default HomeScreen = ({ navigation }) => {
// set up state and setter for username state
const [username, setUsername] = useState('');
// effect hook for fetching username
useEffect(() => {
doSomethingToGetUsername().then(result => {
setUsername(result);
}).catch(error => {
console.log(error);
});
}, [username]);
const usernameTxt = ` ${username}` || '';
return (
<View style={styles.container}>
<TouchableOpacity onPress={() => { navigation.navigate('Friends') }}>
<Text>Welcome{usernameTxt}</Text>
<Text>Click Here</Text>
</TouchableOpacity>
</View>
)
}