Firebase 可调用函数。 Promise 在客户端返回 null (Cloud Functions)

Firebase callable functions. Promise is returning null on the client ( Cloud Functions )

我开发了这个 firebase 函数来 return 来自我的应用程序搜索 ( elastic ) 的数据。当我在功能控制台上登录时,我可以看到请求数据,我也可以在我的 App Search API 日志中看到响应正文。但是我无法在客户端获取数据

响应正文


{
  "meta": {
    "alerts": [],
    "warnings": [],
    "precision": 2,
    "page": {
      "current": 1,
      "total_pages": 1,
      "total_results": 2,
      "size": 10
    },
    "engine": {
      "name": "engine",
      "type": "default"
    },
    "request_id": "DF4VEuzuQpWAHH8VCBkvDg"
  },
  "results": [
    {
      "nome": {
        "raw": "Produto legal"
      },
      "_meta": {
        "engine": "engine",
        "score": 0.8957006,
        "id": "bnxvuzVXIQ4BxqHxjvgt"
      },
      "id": {
        "raw": "bnxvuzVXIQ4BxqHxjvgt"
      }
    },
    {
      "nome": {
        "raw": "Produto massa"
      },
      "_meta": {
        "engine": "engine",
        "score": 0.3164503,
        "id": "rdG192xjSVCLIEBNg0la"
      },
      "id": {
        "raw": "rdG192xjSVCLIEBNg0la"
      }
    }
  ]
}

Firebase 函数


exports.searchProdutos = functions.https.onCall((data, context) => {
  const options = {
    search_fields: { nome: {} },
    result_fields: { nome: { raw: {} } },
  };
  const query = data.query;

  client
    .search("engine", `${query}`, options)
    .then((response) => {
      return response;
    })
    .catch((error) => console.log(error.errorMessages));
});

但是当我尝试在客户端中调用它并记录响应时,我在控制台中记录了两个空对象

客户端函数调用

  const searchProdutos = httpsCallable(functions, "searchProdutos");
  const getProdutos = async () => {
    const results = await searchProdutos({ query: "produto" });
    console.log(results.data);
  };
  getProdutos();

附加信息:我在我的函数中使用 Nodejs App Search 并作为我的前端做出反应library/framework

编辑: 我也收到了 200 响应。所以我想这个请求没有错。我尝试从我的客户端函数中删除 .then 但我仍然得到 data: {null} 两次

我正在为这个话题发布一个社区 Wiki 答案,以便为未来的用户提供一个解决方案。基于 Kevin B 在 chatroom thread, there is a problem 中的评论以及调用您的 Firebase 函数的客户端代码。当您的客户端代码使用 then 语句记录响应时,此 then 语句不是 return 响应,而是 undefined 值,这使得响应在记录。

此外,服务器端 Firebase 函数不会 return 在 client.search() 函数中返回给客户端应用程序的承诺。基于聊天室 comments,您的 Firebase 函数应该 return 来自 client.search() 的响应。