I’m using React Native with Expo and library @react-native-firebase/firestore
.
I’m trying to add a document to a collection in Firestore but the promise never returns so nothing is inserted in firestore.
The promise that never resolves is this one:
// Attempt to add user
const result = await userRef.add({
name: 'Ada Lovelace',
age: 30,
});
Basically I never see the logs
console.log('Result:', result);
This is my code:
import React, { useEffect } from 'react';
import { View, Text, Button } from 'react-native';
import firebase from '@react-native-firebase/app';
import firestore from '@react-native-firebase/firestore';
// Configuración de Firebase
const firebaseConfig = {
apiKey: "xxx",
authDomain: "xxx",
projectId: "xxx",
storageBucket: "xxx",
messagingSenderId: "xxx",
appId: "xxx",
measurementId: "xxx"
};
// Inicializar Firebase
if (!firebase.apps.length) {
console.log('Initializing Firebase');
firebase.initializeApp(firebaseConfig);
} else {
console.log('Firebase already initialized');
}
export default function App() {
useEffect(() => {
console.log('Firestore instance:', firestore());
}, []);
const addUser = async () => {
try {
console.log('Adding user...');
const userRef = firestore().collection('Users');
console.log('User collection reference:', userRef);
// Attempt to add user
const result = await userRef.add({
name: 'Ada Lovelace',
age: 30,
});
console.log('Result:', result);
console.log('User added!');
} catch (error: any) {
console.error('Error adding user: ', error);
// Captura de errores HTTP
if (error.response) {
console.log('Error data:', error.response.data);
console.log('Error status:', error.response.status);
console.log('Error headers:', error.response.headers);
} else if (error.request) {
console.log('Error request:', error.request);
} else {
console.log('Error message:', error.message);
}
console.log('Error config:', error.config);
alert(`Error adding user: ${error.message}`);
}
};
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Add User to Firestore</Text>
<Button title="Add User" onPress={addUser} />
</View>
);
}
and this is my rule:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
I’m using these versions:
"@react-native-firebase/app": "^20.3.0",
"@react-native-firebase/auth": "^20.3.0",
"@react-native-firebase/firestore": "^20.3.0",
"@react-native-firebase/messaging": "^20.3.0",