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



我正试图在我的firestore Cloud Function触发器事件中查询另一个集合,但它总是不返回任何信息,但当我尝试在该firestore触发器事件中进行查询时,它可以

看看

exports.newTicketNotification = functions.firestore
.document('tickets/{refNo}')
.onCreate(async (snap, context) => {
//get user
const user = snap.data().ticketOwnerUid
// Here i tried to query a collection called fcmTokens(Where my fcmTokens are stored)
// this returned no matching documents
// but if i use this  db.collection('tickets').where('tickeOwnerUid', '==', user).get() it works 
db.collection('fcmTokens').where('userUid', '==', user).get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
}  
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
});

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

请注意,您同时使用async/awaitthen()

以下内容应该有效:

exports.newTicketNotification = functions.firestore
.document('tickets/{refNo}')
.onCreate((snap, context) => {   //Note that we have removed async
const db = admin.firestore();
//get user
const user = snap.data().ticketOwnerUid
// Here i tried to query a collection called fcmTokens(Where my fcmTokens are stored)
// this returned no matching documents
// but if i use this  db.collection('tickets').where('tickeOwnerUid', '==', user).get() it works 
return db.collection('fcmTokens').where('userUid', '==', user).get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
}  
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
//If you plan to call asynchronous methods, you should probably use Promise.all
});
return;
})
.catch(err => {
console.log('Error getting documents', err);
return;
});
});

注意我们是如何返回Promises链的,因为Cloud函数是后台触发的。我建议您观看Firebase系列视频中关于"JavaScript承诺"的3个视频:https://firebase.google.com/docs/functions/video-series/从而解释了这一关键点。

最新更新