Firebase Firestore云函数查询外部触发器事件

Firebase Firestore云函数查询外部触发器事件,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我试图在firestore云函数触发器事件内查询另一个集合,但它始终不返回任何内容,但当我尝试在firestore触发器事件内查询时,它会工作 看一看 exports.newTicketNotification=functions.firestore .document('tickets/{refNo}')) .onCreate(异步(快照、上下文)=>{ //获取用户 const user=snap.data().ticketOwnerUid //在这里,我试图查询一个名为fcmtoken的集

我试图在firestore云函数触发器事件内查询另一个集合,但它始终不返回任何内容,但当我尝试在firestore触发器事件内查询时,它会工作

看一看

exports.newTicketNotification=functions.firestore
.document('tickets/{refNo}'))
.onCreate(异步(快照、上下文)=>{
//获取用户
const user=snap.data().ticketOwnerUid
//在这里,我试图查询一个名为fcmtoken的集合(我的fcmtoken存储在这里)
//这没有返回匹配的文档
//但是如果我使用这个db.collection('tickets').where('ticketowneruid','==',user.).get()它可以工作
db.collection('fcmTokens')。其中('userUid','=',user.get()
。然后(快照=>{
if(snapshot.empty){
console.log('没有匹配的文档');
返回;
}  
snapshot.forEach(doc=>{
console.log(doc.id'=>',doc.data());
});
})
.catch(错误=>{
console.log('获取文档时出错',err);
});
});

我正在使用它,以便获得设备的fcm令牌并向他们发送通知。这样做对吗?或者你们可以推荐一种更好的方式提前谢谢;)另外,我被困了两天:(

注意,您正在同时使用
async/await
then()

以下方面应起作用:

exports.newTicketNotification=functions.firestore
.document('tickets/{refNo}'))
.onCreate((snap,context)=>{//请注意,我们已经删除了async
const db=admin.firestore();
//获取用户
const user=snap.data().ticketOwnerUid
//在这里,我试图查询一个名为fcmtoken的集合(我的fcmtoken存储在这里)
//这没有返回匹配的文档
//但是如果我使用这个db.collection('tickets').where('ticketowneruid','==',user.).get()它可以工作
返回db.collection('fcmTokens')。其中('userUid','=',user.get()
。然后(快照=>{
if(snapshot.empty){
console.log('没有匹配的文档');
返回;
}  
snapshot.forEach(doc=>{
console.log(doc.id'=>',doc.data());
//如果您计划调用异步方法,可能应该使用Promise.all
});
返回;
})
.catch(错误=>{
console.log('获取文档时出错',err);
返回;
});
});


请注意我们如何返回承诺链,因为云函数是后台触发的。我建议您观看Firebase视频系列中关于“JavaScript承诺”的3个视频:它们解释了这一关键点。

请注意,您同时使用的是
async/await
then()

以下方面应起作用:

exports.newTicketNotification=functions.firestore
.document('tickets/{refNo}'))
.onCreate((snap,context)=>{//请注意,我们已经删除了async
const db=admin.firestore();
//获取用户
const user=snap.data().ticketOwnerUid
//在这里,我试图查询一个名为fcmtoken的集合(我的fcmtoken存储在这里)
//这没有返回匹配的文档
//但是如果我使用这个db.collection('tickets').where('ticketowneruid','==',user.).get()它可以工作
返回db.collection('fcmTokens')。其中('userUid','=',user.get()
。然后(快照=>{
if(snapshot.empty){
console.log('没有匹配的文档');
返回;
}  
snapshot.forEach(doc=>{
console.log(doc.id'=>',doc.data());
//如果您计划调用异步方法,可能应该使用Promise.all
});
返回;
})
.catch(错误=>{
console.log('获取文档时出错',err);
返回;
});
});


注意我们如何返回承诺链,因为云函数是一个后台触发的函数。我建议您观看关于“JavaScript承诺”的3个视频Firebase视频系列:这说明了这个关键点。

哪个值分配给
db
变量?哪个值分配给
db
变量?@Cedric Hi,你有时间查看建议的解决方案吗?@Cedric Hi,你有时间查看建议的解决方案吗?