gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:22:16 24 4
gpt4 key购买 nike

我是 javascript/nodeJS 的新手。我正在尝试实现一个 http firebase 云函数,它在它的主体中接收 userID。收到后,我需要调用 firestore getDocument 函数并获取它的相应数据,处理这些数据并在 http 云函数响应中发送回客户端。

我的代码如下,我在 Postman 中得到了一个空响应。但是我可以在我的服务器日志中注意到,我的 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() 是异步的,并且会立即返回一个 promise ,该 promise 会在某个未知时间后用查询结果解决。您的函数 getRequestedUserDetails 在定义之前返回 user。相反,也许您的函数还可以返回在查询结果出现时解析的 promise ,并且调用者可以使用 then() 来接收其结果并发送响应。

关于javascript - 如何在云函数中调用 firestore getDocument 并使用云函数将其响应发送回客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462834/

24 4 0