You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:06:08