Firebase可调用云函数对接App Search客户端返回null如何解决
问题根因
你当前的Firebase可调用云函数没有将Elastic App Search的异步请求Promise返回,云函数会在异步搜索请求完成前就提前结束执行,因此默认返回null给客户端,哪怕App Search侧已经返回了正确响应,也不会被传递到客户端。
修复方案
修改云函数代码,返回异步请求的Promise即可,同时完善错误处理逻辑,把错误也返回给客户端方便排查:
写法1:直接返回Promise
exports.searchProdutos = functions.https.onCall((data, context) => { const options = { search_fields: { nome: {} }, result_fields: { nome: { raw: {} } }, }; const query = data.query; // 这里加上return,把搜索的Promise返回给云函数框架 return client .search("engine", `${query}`, options) .then((response) => { return response; }) .catch((error) => { console.log(error.errorMessages); // 抛出错误让客户端也能收到异常信息 throw new functions.https.HttpsError('internal', '搜索请求失败', error.errorMessages); }); });
写法2:async/await 写法(更易读)
exports.searchProdutos = functions.https.onCall(async (data, context) => { const options = { search_fields: { nome: {} }, result_fields: { nome: { raw: {} } }, }; const query = data.query; try { const response = await client.search("engine", `${query}`, options); return response; } catch (error) { console.log(error.errorMessages); throw new functions.https.HttpsError('internal', '搜索请求失败', error.errorMessages); } });
两次打印null的说明
你看到的两次打印是React开发环境下严格模式(StrictMode)的正常行为,它会重复执行一次副作用逻辑用来检测代码是否有潜在问题,生产环境不会出现该现象,不需要额外处理。
内容的提问来源于stack exchange,提问作者Davi Cheli Miquelim
相关产品推荐
相关产品推荐

