Я новичок в React Native, Javascript и Firestore. Проблема заключается в том, что я пытаюсь прочитать базу данных пожарного магазина и дождаться ответа, чтобы отобразить информацию на следующей странице, прежде чем она будет обработана.
Вот код контроллера:
_signIn = async () => {
try {
// Google sign in and connect to Firebase
... This code is working as expected
// Connect to the Firebase Firestore and store the connection
CesarFirestore.setFirestore(firebase.firestore());
let cFS = CesarFirestore.getInstance();
cFS.saveLoginDetails(this.cUser);
// THIS IS THE CALL TO GET THE STATUS OF THE USER
await cFS.readAvailability(this.cUser);
this.setState({loggedIn: true});
} else {
... INVALID login coding works fine
}
} catch (error) {
... CATCH coding works fine
}
}
};
Из отмеченной выше строки выполняется следующий код:
async readAvailability(cUser) {
let tuesdayDate = new CesarDate().getTuesday();
let availableRef = CesarFirestore.getFirestore().collection('available');
let availableQuery = await availableRef
.where('tuesdayDate', '==', tuesdayDate)
.where('userId', '==', cUser.getUserId())
.get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
cUser.setTuesdayAvailability('NOT_FOUND');
}
snapshot.forEach(doc => {
cUser.setTuesdayAvailability(doc.get('status'));
});
})
.catch(err => {
console.log('Error getting documents', err);
});
}
Поэтому код readAvailability (cUser) должен дождаться, пока availableQuery вернет результаты. Затем результаты будут сохранены в классе cUser, который доступен для остальной части приложения.
В некоторых случаях бывает, что результат доступен, а иногда - нулевой. Я думаю, это потому, что doc
не определено, что я подтвердил с помощью отладчика.
Любая помощь будет большой, и спасибо заранее