我正在申请表格。用户注册,然后在Firebase的“ companies”集合中添加一个新公司,然后在刚刚创建的公司下添加一个“用户”集合,并将刚刚创建的用户作为文档添加到该公司。>
一切正常,直到我的代码尝试在刚刚创建的公司下添加新的集合“用户”。到目前为止,这是我的代码:
return async (dispatch, getState) => {
try {
const { companyName, email, password } = getState().user;
const response = await Firebase.auth().createUserWithEmailAndPassword(
email,
password
);
if (response.user.uid) {
// Set up company
const company = {
name: companyName,
owner: response.user.uid
};
// Create company
db.collection("companies")
.add(company)
.then(ref => {
console.log("Company ID ", ref.id);
console.log("User ID ", response.user.uid);
// Set up first user
const user = {
uid: response.user.uid,
email: email
};
// Add first User
db.doc(ref.id)
.collection("users")
.add(user);
});
dispatch({ type: SIGNUP, payload: user });
}
} catch (e) {
alert(e);
}
};
那些console.logs返回正确的ID,所以我对刚刚创建的公司的引用的创建方式似乎有问题?我该如何解决?
答案 0 :(得分:2)
db.doc(ref.id).collection("users").add(user)
可能是错误的。
您可以尝试ref.collection("users").add(user)
还是db.collection("companies").doc(ref.id).collection("users").add(user);
// Add first User
// db.doc(ref.id)
// .collection("users")
// .add(user);
ref.collection("users").add(user);
// db.collection("companies").doc(ref.id).collection("users").add(user);
请参阅:
答案 1 :(得分:1)
除了zkohi的正确答案外,请注意,您还将async / await与then()
混合使用,不建议这样做。以下应该可以解决问题(未试用):
return async (dispatch, getState) => {
try {
const { companyName, email, password } = getState().user;
const response = await Firebase.auth().createUserWithEmailAndPassword(
email,
password
);
if (response.user.uid) {
// Set up company
const company = {
name: companyName,
owner: response.user.uid,
};
// Create company
const compRef = await db.collection('companies').add(company);
console.log('Company ID ', compRef.id);
const user = {
uid: response.user.uid,
email: email,
};
await compRef.collection('users').add(user);
dispatch({ type: SIGNUP, payload: user });
}
} catch (e) {
alert(e);
}
};
请注意我们如何定义users
子集合:
compRef.collection('users').add(user);
只需在公司的DocumentReference
上调用collection()
方法即可。最后一点与zkohi的答案是一致的。