将未定义的 Firebase 函数写入 Firestore
Firebase Function writing undefined to Firestore
我是新手,如果需要更多信息,请告诉我!
我正在尝试将 MessageBird 与 Firestore 集成。除了需要 phone 数字的“to”字段外,它正在将所有内容写入数据库。我正在记录数字,它在控制台中正确输出,除了在我的 Firestore 中它被存储为 undefined
。如果有人能提供任何关于为什么会这样的见解,那将不胜感激。我被困了一段时间。 (附上出现问题的部分功能和控制台截图)
我最初尝试在 doc.data()?.phoneNum
行上不使用 await
,但刚收到 [object Promise]
。现在它正在控制台中打印,我知道这与它无关。请帮忙!
admin.auth().listUsers().then((res) => {
res.users.forEach((userRecord) => {
try {
const dbRef = firestore()
.collection("collection").doc(userRecord.uid)
.collection("collection").doc(document);
dbRef.get().then((context) => {
if (context.exists) {
firestore()
.collection("collection")
.doc(userRecord.uid).get()
.then(async (doc) => {
number = await doc.data()?.field1;
console.log("Sending message to: " + number);
});
firestore().collection("collection")
.doc()
.create({
channelId: "id",
type: "text",
content: {
text: "message",
},
to: `${number}`,
});
functions.logger.log("SUCCESSFULLY SENT TO DB");
} else {
// console.log("**Unviable user**");
}
});
} catch (error) {
console.log(error);
}
});
});
承诺似乎没有得到妥善处理。 .data()
没有 return 承诺,因此您不需要 await
。我也没有看到 var 'number'
在任何地方声明,所以它是未定义的。您可以尝试 运行 以下代码:
admin.auth().listUsers().then(async (res) => {
try {
for (const userRecord in res) {
const dbRef = firestore()
.collection("collection").doc(userRecord.uid)
.collection("collection").doc(document);
const context = await dbRef.get()
if (context.exists) {
const number = (await firestore().collection("collection").doc(userRecord.uid).get()).data().field1
console.log("Sending message to: " + number);
await firestore().collection("collection").add({
channelId: "id",
type: "text",
content: {
text: "message",
},
to: `${number}`,
});
functions.logger.log("SUCCESS");
} else {
// console.log("**Unviable user**");
}
}
} catch (error) {
}
});
另外 forEach
不等待 promises 解决,所以我使用了 for-in 循环。
我是新手,如果需要更多信息,请告诉我!
我正在尝试将 MessageBird 与 Firestore 集成。除了需要 phone 数字的“to”字段外,它正在将所有内容写入数据库。我正在记录数字,它在控制台中正确输出,除了在我的 Firestore 中它被存储为 undefined
。如果有人能提供任何关于为什么会这样的见解,那将不胜感激。我被困了一段时间。 (附上出现问题的部分功能和控制台截图)
我最初尝试在 doc.data()?.phoneNum
行上不使用 await
,但刚收到 [object Promise]
。现在它正在控制台中打印,我知道这与它无关。请帮忙!
admin.auth().listUsers().then((res) => {
res.users.forEach((userRecord) => {
try {
const dbRef = firestore()
.collection("collection").doc(userRecord.uid)
.collection("collection").doc(document);
dbRef.get().then((context) => {
if (context.exists) {
firestore()
.collection("collection")
.doc(userRecord.uid).get()
.then(async (doc) => {
number = await doc.data()?.field1;
console.log("Sending message to: " + number);
});
firestore().collection("collection")
.doc()
.create({
channelId: "id",
type: "text",
content: {
text: "message",
},
to: `${number}`,
});
functions.logger.log("SUCCESSFULLY SENT TO DB");
} else {
// console.log("**Unviable user**");
}
});
} catch (error) {
console.log(error);
}
});
});
承诺似乎没有得到妥善处理。 .data()
没有 return 承诺,因此您不需要 await
。我也没有看到 var 'number'
在任何地方声明,所以它是未定义的。您可以尝试 运行 以下代码:
admin.auth().listUsers().then(async (res) => {
try {
for (const userRecord in res) {
const dbRef = firestore()
.collection("collection").doc(userRecord.uid)
.collection("collection").doc(document);
const context = await dbRef.get()
if (context.exists) {
const number = (await firestore().collection("collection").doc(userRecord.uid).get()).data().field1
console.log("Sending message to: " + number);
await firestore().collection("collection").add({
channelId: "id",
type: "text",
content: {
text: "message",
},
to: `${number}`,
});
functions.logger.log("SUCCESS");
} else {
// console.log("**Unviable user**");
}
}
} catch (error) {
}
});
另外 forEach
不等待 promises 解决,所以我使用了 for-in 循环。