我正在尝试在“用户”集合中创建具有多个字段(角色,电子邮件,createdAt)的文档。我将这些字段和关联的数据存储在“数据”变量中,并将doc设置为该对象。问题在于仅分配了电子邮件字段,而其余部分未显示在Firebase的文档中。
我尝试了直接在set()中使用对象或直接在{}中设置字段的变体,似乎并没有太大区别。
this.data = { email: this.email, role: "new", createdAt: this.timestamp};
console.log("user", user);
console.log("uid", user.user.uid);
let docRef = db
.collection("Users")
.doc(user.user.uid)
.set(this.data)
.then(function() {
console.log("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
console.log(this.data);
return docRef.then(res => {
console.log("Set: ", res);
this.$router.push("/welcome");
});
所有控制台日志均符合预期,但“设置”控制台日志为Null。只有电子邮件字段显示在新创建的文档上。
编辑:弄清楚,创建帐户时正在运行Cloud Function,并且正在“用户”集合中创建文档
答案 0 :(得分:0)
您的docRef
似乎是来自catch()
返回值的承诺。这个承诺不会用刚刚添加的文档的内容来解决。 set()返回的承诺甚至都不会给您内容。如果要查询该文档的内容,则必须在对该文档的引用上使用get()。
db.collection("Users").doc(user.user.uid).get(snap => {
// snap is a snapshot that contains the fields of the document
})
答案 1 :(得分:0)
我认为道格·史蒂文森(Doug Stevenson)已经回答了您的问题-要获取刚刚添加的内容,您需要从Firebase进行查询。但是,只需添加一些内容,您似乎就可能要等到添加数据以更改路线后,在这种情况下,您可能想要尝试这样的事情:
db
.collection("Users")
.doc(user.user.uid)
.set(this.data)
.then(function() {
console.log("Document successfully written!");
// After you know the data has been written, you can query it.
db.collection("Users").doc(user.user.uid).get().then((res) => {
// Log the data from the response
console.log(res.data())
resolve()
}).catch((err) => {
console.log(err)
reject(err)
})
// Then change the route.
this.$router.push("/welcome");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});