如何在云函数中调用 firestore getDocument 并使用云函数将其响应发送回客户端?



我是javascript/nodeJS的新手。我正在尝试实现一个http firebase云函数,该函数在其正文中接收userID。收到后,我需要调用 firestore getDocument 函数并获取其相应的数据,对这些数据进行操作并在 http 云函数响应中发送回客户端。

我的代码如下,我在邮递员中得到一个空响应。但是,我可以在我的服务器日志中注意到,我的 firestore getDocument 中的以下语句打印了正确的数据。

console.log('Document data:', user);     

但是,当我在http云函数中打印相同的数据时,它是空的。

console.log('User data:', user);

根据我的理解,即使firestore获取实际数据,http云函数也会在检索这些实际数据之前发送其响应,从而导致响应为空。

感谢您的见解。提前感谢!

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
let db = admin.firestore();
var getRequestedUserDetails = function (userId, db) {
var user;
var cityRef = db.collection('users').doc(userId);
var getDoc = cityRef.get()
.then(doc => {
if (!doc.exists) {
console.log('No such document!');
return user;
} else {
user = doc.data();
console.log('Document data:', user);
return user;
}
})
.catch(err => {
console.log('Error getting document', err);
throw new Error('Error getting document', err);
});
return user;
}
exports.helloWorld = functions.https.onRequest((request, response) => {
if (request.method !== "POST") {
response.status(400).send('Invalid HTTP Request');
return;
}
userId = request.body.userId;
var user = getRequestedUserDetails(userId, db);
console.log('User data:', user);
response.send(user);
});
get()

是异步的,并立即返回一个承诺,该承诺会在某个未知时间后使用查询结果进行解析。 您的函数getRequestedUserDetails在定义之前就返回user。 相反,也许您的函数还可以返回在查询结果时解析的承诺,并且调用方可以使用then()来接收其结果并发送响应。

最新更新