我開發了這個 firebase 函式來從我的應用程式搜索 (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 并作為我的前端庫/框架做出反應
編輯:我也收到了 200 條回復。所以我想這個請求沒有任何問題。我嘗試從我的客戶端函式中洗掉 .then 但我仍然得到data: {null}兩次
uj5u.com熱心網友回復:
我正在為此執行緒發布社區 Wiki 答案,以便為未來的用戶提供可用的解決方案。根據聊天室執行緒中Kevin B 的評論,呼叫您的 Firebase 函式的客戶端代碼存在問題。當您的客戶端代碼使用then陳述句記錄回應時,該then陳述句不會回傳回應,而是回傳一個undefined值,這會使回應在被記錄后丟失。
此外,服務器端 Firebase 函式不會將承諾回傳給client.search()函式內部的客戶端應用程式。根據聊天室評論,您的 Firebase 函式應從 回傳回應client.search()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345579.html
標籤:javascript 节点.js 火力基地 表达 谷歌云功能
