Впервые работаю над React-Native и использую связку ключей для страницы входа, где у меня возникла эта проблема.
import React, { useEffect, useState } from "react";
import { StyleSheet, Text, TextInput, View, Dimensions } from "react-native";
import * as Keychain from "react-native-keychain";
export default function App() {
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [userDetails, setUserDetails] = useState({});
useEffect(() => {
(async () => {
try {
const credentials = await Keychain.getGenericPassword();
if (credentials) {
setIsLoggedIn(true);
setUserDetails(credentials);
} else {
console.log("No credentials stored");
}
} catch (error) {
console.log("Keychain couldn't be accessed!", error);
}
})();
}, []);
const handleLogin = async () => {
// login api call here
const username = "Shivam";
const password = "shivam";
await Keychain.setGenericPassword(username, password);
setIsLoggedIn(true);
setUserDetails({password, username});
};
const handleLogout = async()=>{
const logout = await Keychain.resetGenericPassword();
console.log({logout});
if(logout){
setIsLoggedIn(false);
setUserDetails({});
}
}
return (
<View style={styles.container}>
{!isLoggedIn? (
<View>
<Text style={styles.helloText}>Hello Tayze User!</Text>
<TextInput placeholder="email" style={styles.textInput} />
<TextInput
placeholder="password"
secureTextEntry
style={styles.textInput}
/>
<Text style={styles.loginBtn} onPress={handleLogin}>
Login
</Text>
</View>
): (
<View>
<Text style={styles.welcomeText}>
Welcome back! {userDetails}
</Text>
<Text style={styles.logoutBtn} onPress={handleLogout} >Logout</Text>
</View>
)}
</View>
);
}
const screenWidth = Dimensions.get("screen").width;
Я получаю следующую ошибку:
Возможный необработанный отказ от обещания (идентификатор: 0: сетевой запрос не выполнен)
Вот код обещания, я не вижу, что здесь не так, есть идеи? Этот код устанавливает пользователя во время входа в систему и попадает на домашнюю страницу, где будет отображаться имя пользователя и одна кнопка выхода.
Решение проблемы
Ошибка Possible unhandled promise rejectionозначает, что в каком-то вашем асинхронном коде возникла ошибка, и эта ошибка не была обработана.
Чтобы обрабатывать ошибки в асинхронных методах, вы должны обернуть их в блоки try/catch:
const handleLogin = async () => {
const username = "Shivam";
const password = "shivam";
try {
await Keychain.setGenericPassword(username, password);
setIsLoggedIn(true);
setUserDetails({password, username});
} catch (err) {
console.log('Login failed', err);
}
};
const handleLogout = async () => {
try {
const logout = await Keychain.resetGenericPassword();
setIsLoggedIn(false);
setUserDetails({});
} catch (err) {
console.log('Logout failed', err);
}
};
В этом случае выдаваемая ошибка является сетевой ошибкой. Вы можете проверить вкладку сети инструментов разработчика вашего браузера, чтобы увидеть, что происходит.
Комментариев нет:
Отправить комментарий