我正在尝试从Firestore中的文档“用户”中获取“ isSeller:true”字段,但一直未定义。最终,我意识到useEffect中的用户对象经常返回一个promise(__proto__: object
)而不是实际的对象。
function StorefrontPage(props) {
const auth = useAuth();
const router = useRouter();
const [user, setUser] = useState({});
const uid = auth.user && auth.user.uid;
useEffect(() => {
uid && getUser(uid).then(currentUser => {
setUser(currentUser);
})
console.log(user);
}, [])
console.log(user);
我第一次运行此命令,它将返回我想要的对象,但是随后的刷新和页面更改将把console.log变成__proto__
对象/承诺。我以为将它包装在useEffect挂钩中可以解决此问题,但事实并非如此。如何确保它总是返回用户对象而不是诺言?
作为参考,getUser函数为:
export function getUser(uid) {
return firestore.collection('users').doc(uid).get().then(user => {
return user.data();
})
}
答案 0 :(得分:1)
从效果上来说,您可以午餐设置状态的功能
useEffect(() => { uid && getUser(uid, setUser)}, [])
并在使用.catch
后添加.then
export function getUser(uid, setUser) {
return firestore.collection('users')
.doc(uid).get()
.then(user => setUser(user))
.catch(err => console.log(err))
}