[我正在尝试从Firebase onUpdate的集合“用户”中查询数据,更新文档“ bulkMsgs”,但每次这样做都会收到“获取用户错误”。
这两种方法都可以单独工作,但是当我将它们结合使用时,就会发生错误。
我在这里想念的是什么?!
var functions = require("firebase-functions");
let admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.bulkMsg = functions.firestore
.document('/bulkMsgs/{bulkMsgsId}').onUpdate((snap, context) => {
const newValue = snap.after.data();
const regDate = newValue.regDate;
admin.firestore().collection('users').get().then(onUser => {
onUser.forEach(oneUser => {
if (oneUser.data().notification === "true") {
console.log(oneUser.id);
}
});
return true;
}).catch(err => {
console.log('Error getting user', err);
});
return true;
});
CF日志中错误的[Image。
您正在获得Error: 4 DEADLINE_EXCEEDED
。在网上快速进行search显示,当“您发出的请求花费的时间过长”时,似乎会发生这种情况。
但是,关于您在上面的评论中所做的澄清,似乎您处理的不是很多。
如果您返回由get()
异步方法返回的promise,将会发生以下情况。
exports.bulkMsg = functions.firestore .document('/bulkMsgs/{bulkMsgsId}').onUpdate((snap, context) => { const newValue = snap.after.data(); const regDate = newValue.regDate; return admin.firestore().collection('users').get() .then(onUser => { onUser.forEach(oneUser => { if (oneUser.data().notification === "true") { console.log(oneUser.id); } }); return null; }).catch(err => { console.log('Error getting user', err); return null; }); });
事实上,您必须在后台触发的Cloud Function中返回Promise或值。我建议您观看Firebase视频系列中有关“ JavaScript Promises”的3个视频:https://firebase.google.com/docs/functions/video-series/,它们解释了这一关键点。