【问题标题】:How to call firestore getDocument within a cloud function and send it's response back to the client using cloud function?如何在云功能中调用 firestore getDocument 并使用云功能将其响应发送回客户端?
【发布时间】:2018-09-23 03:53:49
【问题描述】:

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

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

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

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

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

根据我的理解,即使 firestore 获取了实际数据,http cloud 功能也会在检索这些实际数据之前发送它的响应,这会导致空响应。

感谢您的洞察力。提前致谢!

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);

});

【问题讨论】:

    标签: javascript node.js firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 2021-06-20
    • 2021-04-14
    • 2018-09-06
    • 2018-09-04
    • 2019-11-12
    • 1970-01-01
    • 2019-04-14
    相关资源
    最近更新 更多