Ниже приведен фрагмент кода в моем контексте аутентификации, в котором я устанавливаю данные для входа в систему с указанием c сведений о пользователе в контексте. Но проблема в том, что код выходит из блока useEffect, хотя я использовал asyn c для завершения чтения документа. Но код все равно проходит мимо useEffect, и после этого извлекаются пользовательские данные.
Я хотел бы прочитать документ, прежде чем элемент управления выйдет из употребления. Эффект.
Пожалуйста, дайте мне знать, что я делаю неправильно.
useEffect(() => {
auth.onAuthStateChanged(user => {
let userDetails : IUser = {
landingPage: "error",
permissions: {
'none' : {
'read' : false,
'write' : false
}
},
role: "none",
shopId: "none"
};
if (user) {
console.log("Read user data now");
(async function some() {
await readDocument("users", user.uid,function (result: IUser) {
userDetails = result;
console.log("Result received in ", result);
});
})();
}
return setState({
...authInitialState,
isAuthenticated: !!user,
isInitialized: true,
permissions: userDetails.permissions,
user: user,
landingPage: userDetails.landingPage
});
});
}, []);
Функция readdocument
function readDocument(collection: string, docId: string, callback: any) {
console.log("Going to read:", docId);
db.collection(collection).doc(docId)
.get()
.then(function (doc) {
callback(doc.data());
console.log("Read data", doc.id, " => ", doc.data());
})
.catch(function (error) {
console.log("Failed to write", error);
});
}