我想将文档添加到文档的子集合中,但是它不起作用(代码执行在第一次等待时挂起)。该代码在带有Firebase 6.4.0的浏览器中运行。
const docRef = await firebase
.firestore()
.collection('users')
.doc(uid)
.collection('lists')
.add({
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
title,
description
});
const docSnapshot = await docRef.get();
我尝试使用users/${uid}/lists
表示路径,但这没有任何改变。
正确设置了Firestore规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/{document=**} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
我可以使用用户文档上的中间get()使其工作,但我认为这没有必要:
const userSnapshot = await firebase
.firestore()
.collection('users')
.doc(uid)
.get();
const docRef = await userSnapshot.ref.collection('lists').add({
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
title,
description
});
const docSnapshot = await docRef.get();
我在第一个代码段中做错了什么吗?
在此先感谢您的帮助;-)
编辑:就像我在评论中说的那样,这被redux-thunk占用,这是完整的方法实现:
export const createList = (
title: string,
description: string
): ThunkAction<void, AppState, null, CreateListActions> => async (
dispatch,
getState
) => {
const { uid } = getState().auth.currentUser!;
dispatch(createListStarted({ title, description }));
try {
const listReference = await firebase
.firestore()
.collection('users')
.doc(uid)
.collection('lists')
.add({
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
title,
description
});
const listSnapshot = await listReference.get();
const list = toObject<List>(listSnapshot);
dispatch(createListSucceeded(list));
history.push('/lists');
} catch (error) {
dispatch(createListFailed(error));
}
};
答案 0 :(得分:0)
这可能是Firebase软件包6.4.0版中的错误。我安装了6.3.5版本,问题消失了!