Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

337
Views
getting the following warning while trying to run my app: Possible Unhandled Promise Rejection (id:1)

I'm currently working on an app and I'm getting this warning and wanted to know what I could do to fix the promise rejection. This warning appears as soon as the screen mounts.

The screenshot of the error:

enter image description here

enter image description here

enter image description here

Code for app.js:

import React, { useState } from "react";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import { View, Text, TouchableOpacity, Alert } from "react-native";

import Main from "./Screens/Main";
import Login from "./Screens/Login";
import Settings from "./Screens/Settings";
import EditPatient from "./Screens/EditPatient";
import Add from "./Screens/Add";
import * as firebase from "firebase/auth";
import { Input } from "react-native-elements";
import theme from "./Props/theme";
import './Config/Firebase'
import * as Font from "expo-font";
import ViewSelectedTeeth from "./Screens/ViewSelectedTeeth";
import Pending from "./Screens/Pending";
import Completed from "./Screens/Completed";
import AllCases from "./Screens/AllCases";
import { LogBox } from "react-native";

const Stack = createStackNavigator();

export default class App extends React.Component {
  async componentDidMount() {
    await Font.loadAsync({
      ubuntuMedium: require("./Assets/Fonts/Ubuntu-Medium.ttf"),
      ubuntuBold: require("./Assets/Fonts/Ubuntu-Bold.ttf"),
      ubuntuItalic: require("./Assets/Fonts/Ubuntu-Italic.ttf"),
      ubuntuLight: require("./Assets/Fonts/Ubuntu-Light.ttf"),
      ubuntuRegular: require("./Assets/Fonts/Ubuntu-Regular.ttf"),
      dosisMedium: require("./Assets/Fonts/Dosis-Medium.ttf"),
      dosisBold: require("./Assets/Fonts/Dosis-Bold.ttf"),
      dosisSemibold: require("./Assets/Fonts/Dosis-SemiBold.ttf"),
      dosisLight: require("./Assets/Fonts/Dosis-Light.ttf"),
      dosisRegular: require("./Assets/Fonts/Dosis-Regular.ttf"),
      comfortaaMedium: require("./Assets/Fonts/Comfortaa-Medium.ttf"),
      comfortaaBold: require("./Assets/Fonts/Comfortaa-Bold.ttf"),
      comfortaaSemibold: require("./Assets/Fonts/Comfortaa-SemiBold.ttf"),
      comfortaaLight: require("./Assets/Fonts/Comfortaa-Light.ttf"),
      comfortaaRegular: require("./Assets/Fonts/Comfortaa-Regular.ttf"),
    });
    LogBox.ignoreLogs(["Setting a timer for a long period of time"]);
  }

  state = {
    currentPassword: "",
    newPassword: "",
    isFirstLaunch: null,
  };

  resetPassword = ({ navigation }) => {
    const [currentPassword, setCurrentPassword] = useState("");
    const [newPassword, setNewPassword] = useState("");
    const reauthenticate = (currentPassword) => {
      var user = firebase().currentUser;
      var cred = firebase.EmailAuthProvider.credential(
        user.email,
        currentPassword
      );
      return user.reauthenticateWithCredential(cred);
    };
    const onChangePassword = async () => {
      await reauthenticate(currentPassword)
        .then(() => {
          var user = firebase().currentUser;
          user
            .updatePassword(newPassword)
            .then(() => {
              Alert.alert("Password has been changed");
              setCurrentPassword("");
              setNewPassword("");
              navigation.navigate("Settings");
            })
            .catch((error) => {
              Alert.alert(error.message);
            });
        })
        .catch((error) => {
          Alert.alert(error.message);
        });
    };

    return (
      <View style={{ flex: 1, justifyContent: "center", marginHorizontal: 25 }}>
        <Input
          placeholder="Current Password"
          value={currentPassword}
          onChangeText={(currentPassword) =>
            setCurrentPassword(currentPassword)
          }
          secureTextEntry
        />
        <Input
          placeholder="New Password"
          value={newPassword}
          onChangeText={(newPassword) => setNewPassword(newPassword)}
          secureTextEntry
        />

        <TouchableOpacity
          onPress={() => onChangePassword()}
          style={{
            paddingVertical: 20,
            alignItems: "center",
            justifyContent: "center",
            backgroundColor: theme.darkBlue,
            borderRadius: 40,
          }}
        >
          <Text
            style={{ fontSize: 20, color: "white", fontFamily: "ubuntuBold" }}
          >
            Change Password
          </Text>
        </TouchableOpacity>
      </View>
    );
  };

  render() {
    return (
      <NavigationContainer>
        <Stack.Navigator
          screenOptions={{
            gestureEnabled: true,
            gestureDirection: "horizontal",
            headerBackTitle: "Back",
            headerBackTitleStyle: { color: "black" },
            headerTintColor: "black",
            headerMode:"screen"
          }}
          
        >
          <Stack.Screen
            name="Login"
            component={Login}
            options={{ headerShown: false }}
          />
          <Stack.Screen
            name="Home"
            component={Main}
            options={{ headerShown: false }}
          />
          <Stack.Screen
            name="Settings"
            component={Settings}
            options={{ headerShown: true }}
          />
          <Stack.Screen
            name="Edit"
            component={EditPatient}
            options={{ headerShown: false }}
          />
          <Stack.Screen
            name="Add"
            component={Add}
            options={{ headerShown: true }}
          />

          <Stack.Screen
            name="Reset Password"
            component={this.resetPassword}
            options={{ headerShown: true }}
          />

          <Stack.Screen
            name="View Selected Teeth"
            component={ViewSelectedTeeth}
            options={{ headerShown: false }}
          />

          <Stack.Screen
            name="Remaining Cases"
            component={Pending}
            options={{ headerShown: true }}
          />

          <Stack.Screen
            name="Completed Cases"
            component={Completed}
            options={{ headerShown: true }}
          />

          <Stack.Screen
            name="All Cases"
            component={AllCases}
            options={{ headerShown: true }}
          />
        </Stack.Navigator>
      </NavigationContainer>
    );
  }
}

Code for login.js (as it is the first screen on my stack...I think there may be an issue in that code) :

import React from "react";
import {
  View,
  Text,
  TextInput,
  ActivityIndicator,
  Modal,
  ScrollView,
  TouchableOpacity,
  StyleSheet,
  Image,
  KeyboardAvoidingView,
  Alert,
  StatusBar,
  Platform,
} from "react-native";
import { CheckBox, Input } from "react-native-elements";
import {signInWithEmailAndPassword, createUserWithEmailAndPassword} from "firebase/auth";
import * as db from 'firebase/firestore'
import Constants from "expo-constants";

export default class Login extends React.Component {
  state = {
    email: "",
    password: "",
    showPassword: false,
    userLoggedIn: false,
    modalEmail: "",
    modalPassword: "",
    username: "",
    clinicName: "",
    age: "",
    isModalVisible: false,
    confirmPassword: "",
  };

  showModal = () => {
    return (
      <Modal
        visible={this.state.isModalVisible}
        transparent={false}
        animationType="fade"
      >
        <Text style={styles.signUpText}>Sign up to get started</Text>

        <ScrollView style={{ marginTop: 20 }}>
          <TextInput
            style={styles.formTextInput}
            placeholder={"Userame"}
            value={this.state.username}
            maxLength={40}
            placeholderTextColor="gray"
            onChangeText={(text) => {
              this.setState({
                username: text,
              });
            }}
          />

          <TextInput
            style={styles.formTextInput}
            placeholderTextColor="gray"
            placeholder={"Email ID"}
            value={this.state.modalEmail}
            onChangeText={(text) => {
              this.setState({
                modalEmail: text,
              });
            }}
            keyboardType="email-address"
            autoCapitalize="none"
          />
          <TextInput
            style={styles.formTextInput}
            placeholderTextColor="gray"
            placeholder="Clinic name"
            maxLength={40}
            value={this.state.clinicName}
            onChangeText={(text) => {
              this.setState({
                clinicName: text,
              });
            }}
          />
          <TextInput
            style={styles.formTextInput}
            placeholderTextColor="gray"
            placeholder="Age"
            maxLength={2}
            value={this.state.age}
            onChangeText={(text) => {
              this.setState({
                age: text,
              });
            }}
          />
          <TextInput
            style={styles.formTextInput}
            placeholderTextColor="gray"
            placeholder="Phone number"
            maxLength={10}
            value={this.state.phoneNumber}
            onChangeText={(text) => {
              this.setState({
                phoneNumber: text,
              });
            }}
            keyboardType="numeric"
          />

          <TextInput
            style={styles.formTextInput}
            placeholderTextColor="gray"
            placeholder={"Password"}
            secureTextEntry={true}
            value={this.state.modalPassword}
            onChangeText={(text) => {
              this.setState({
                modalPassword: text,
              });
            }}
          />

          <TextInput
            style={styles.formTextInput}
            placeholderTextColor="gray"
            placeholder={"Confirm Password"}
            secureTextEntry={true}
            value={this.state.confirmPassword}
            onChangeText={(text) => {
              this.setState({
                confirmPassword: text,
              });
            }}
          />

          <TouchableOpacity
            style={styles.registerButton}
            onPress={() => {
              if (
                this.state.modalEmail === "" ||
                this.state.username === "" ||
                this.state.clinicName === "" ||
                this.state.age === "" ||
                this.state.phoneNumber === "" ||
                this.state.modalPassword === "" ||
                this.state.confirmPassword === ""
              ) {
                Alert.alert(
                  "Couldn't sign up",
                  "Please enter all information to sign up"
                );
              } else if (
                this.state.modalPassword !== this.state.confirmPassword
              ) {
                Alert.alert(
                  "Couldn't sign up",
                  "Please make sure the password and confirm password match"
                );
              } else {
                this.onSignUp(this.state.modalEmail, this.state.modalPassword);
              }
            }}
          >
            <Text> Register </Text>
          </TouchableOpacity>

          <TouchableOpacity
            style={styles.cancelButton}
            onPress={() => this.setState({ isModalVisible: false })}
          >
            <Text>Cancel</Text>
          </TouchableOpacity>
        </ScrollView>
      </Modal>
    );
  };

  onSignIn = async (email, password) => {
    this.setState({ userLoggedIn: true });
    signInWithEmailAndPassword(email, password)
      .then((response) => {
        this.props.navigation.replace("Home");
      })
      .catch((error) => {
        Alert.alert("Couldn't sign in", error.message);
      });
    this.setState({ userLoggedIn: false });
  };

  onSignUp = async (email, password) => {
    createUserWithEmailAndPassword(
        this.state.modalEmail,
        this.state.modalPassword
      )
      .then(() => {
        db.addDoc("Users",{
            username: this.state.username,
            email_id: this.state.modalEmail,
            clinicName: this.state.clinicName,
            age: this.state.age,
            phoneNumber: this.state.phoneNumber,
            tablets: []
        })
        this.setState({ isModalVisible: false });
        this.props.navigation.replace("Home");
      })
      .catch((error) => {
        Alert.alert("Coudn't create user", error.message);
        console.warn(error)
      });
  };

  render() {
    return (
      <KeyboardAvoidingView style={{ flex: 1, backgroundColor: "#dfff" }}>
        {this.showModal()}
        <StatusBar hidden />
        <Image
          source={require("../Assets/Images/dentist.png")}
          style={{
            width: 150,
            height: 150,
            alignSelf: "center",
            marginTop: 45,
          }}
        />

        <View style={{ marginTop: 20, marginHorizontal: 20 }}>
          <Text style={{ textTransform: "uppercase", color: "#646464" }}>
            email id
          </Text>
          <Input
            style={{
              marginHorizontal: 10,
              paddingTop: 10,
              paddingHorizontal: 10,
              marginBottom: 10,
              marginVertical: 5,
              color: "#646464",
              paddingBottom: 4,
            }}
            value={this.state.email}
            keyboardType="email-address"
            autoCompleteType="email"
            autoCapitalize="none"
            onChangeText={(email) => this.setState({ email: email })}
          />
          <Text style={{ textTransform: "uppercase", color: "#646464" }}>
            password
          </Text>
          <Input
            style={{
              marginHorizontal: 10,
              paddingTop: 10,
              paddingHorizontal: 10,
              marginBottom: 10,
              marginVertical: 5,
              color: "#646464",
              paddingBottom: 4,
            }}
            value={this.state.password}
            keyboardType="visible-password"
            onChangeText={(password) => this.setState({ password: password })}
            secureTextEntry={this.state.showPassword ? false : true}
          />
          {Platform.OS === "ios" ? (
            <CheckBox
              checkedColor="#0F0"
              onPress={() =>
                this.setState({
                  showPassword: !this.state.showPassword,
                })
              }
              size={20}
              title="Show password"
              uncheckedColor="#F00"
              checked={this.state.showPassword}
              checkedIcon="check"
              uncheckedIcon="close"
            />
          ) : null}
          <TouchableOpacity
            style={{
              alignItems: "center",
              padding: 15,
              backgroundColor: "#FFCBF6",
              marginVertical: 15,
              borderRadius: 30,
            }}
            onPress={() => this.onSignIn(this.state.email, this.state.password)}
          >
            {this.state.userLoggedIn === false ? (
              <Text
                style={{
                  fontSize: 20,
                  color: "#494949",
                  fontWeight: "bold",
                  textTransform: "uppercase",
                }}
              >
                Sign in
              </Text>
            ) : (
              <ActivityIndicator size={"large"} />
            )}
          </TouchableOpacity>
          <TouchableOpacity
            style={{
              alignItems: "center",
              padding: 15,
              backgroundColor: "#D1CCFF",
              marginBottom: 15,
              borderRadius: 30,
            }}
            onPress={() => this.setState({ isModalVisible: true })}
          >
            <Text
              style={{
                fontSize: 20,
                color: "#494949",
                fontWeight: "bold",
                textTransform: "uppercase",
              }}
            >
              Sign up
            </Text>
          </TouchableOpacity>
        </View>
      </KeyboardAvoidingView>
    );
  }
}

const styles = StyleSheet.create({
  formTextInput: {
    width: "75%",
    height: 35,
    alignSelf: "center",
    borderColor: "#8022d9",
    borderRadius: 10,
    borderWidth: 1,
    marginTop: 20,
    padding: 10,
  },
  cancelButton: {
    width: 200,
    height: 30,
    justifyContent: "center",
    alignItems: "center",
    marginTop: 5,
    alignSelf: "center",
  },
  registerButton: {
    width: 200,
    height: 40,
    alignItems: "center",
    justifyContent: "center",
    borderWidth: 1,
    borderRadius: 10,
    marginTop: 30,
    alignSelf: "center",
  },
  signUpText: {
    alignSelf: "center",
    marginTop: 50,
    fontSize: 30,
    fontWeight: "bold",
  },
  linearGradient: {
    flex: 1,
    paddingLeft: 15,
    paddingRight: 15,
    borderRadius: 5,
  },
  buttonText: {
    fontSize: 18,
    textAlign: "center",
    margin: 10,
    color: "#ffffff",
    backgroundColor: "transparent",
  },
});

If you have any idea on how to fix this please let me know. Thanks in advance!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

The warning appears since you did not prefer using try(){}catch(err){} block for await Font.loadAsync(){}. If you check the documentation on using this function on using try catch for font.loadAsync(), it allows you to use try catch block. So if you want to remove the warning message just use following code:

  async componentDidMount() {
   try{
    await Font.loadAsync({
      ubuntuMedium: require("./Assets/Fonts/Ubuntu-Medium.ttf"),
      ubuntuBold: require("./Assets/Fonts/Ubuntu-Bold.ttf"),
      ubuntuItalic: require("./Assets/Fonts/Ubuntu-Italic.ttf"),
      ubuntuLight: require("./Assets/Fonts/Ubuntu-Light.ttf"),
      ubuntuRegular: require("./Assets/Fonts/Ubuntu-Regular.ttf"),
      dosisMedium: require("./Assets/Fonts/Dosis-Medium.ttf"),
      dosisBold: require("./Assets/Fonts/Dosis-Bold.ttf"),
      dosisSemibold: require("./Assets/Fonts/Dosis-SemiBold.ttf"),
      dosisLight: require("./Assets/Fonts/Dosis-Light.ttf"),
      dosisRegular: require("./Assets/Fonts/Dosis-Regular.ttf"),
      comfortaaMedium: require("./Assets/Fonts/Comfortaa-Medium.ttf"),
      comfortaaBold: require("./Assets/Fonts/Comfortaa-Bold.ttf"),
      comfortaaSemibold: require("./Assets/Fonts/Comfortaa-SemiBold.ttf"),
      comfortaaLight: require("./Assets/Fonts/Comfortaa-Light.ttf"),
      comfortaaRegular: require("./Assets/Fonts/Comfortaa-Regular.ttf"),
    });
    LogBox.ignoreLogs(["Setting a timer for a long period of time"]);
   }catch(error){
     // Do something with the error
   }
  }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!