Firebase Functions v.9 - 使用 connectFunctionsEmulator() 后出现内部错误

Firebase Functions v.9 - Internal Error after using connectFunctionsEmulator()

我正在尝试为我的 firebase 函数设置模拟器,但我收到了这个烦人的内部错误。让我们从代码开始。

  const requestApi = () => {
    const functions = getFunctions(app);
    connectFunctionsEmulator(functions, "127.0.0.1", 5001);
    const helloWorld = httpsCallable(functions, "helloWorld");
    helloWorld()
      .then((result) => {
        console.log(result);
      })
      .catch((error) => {
        console.log(error.message, error.code, error.details);
      });
  };

所以这个函数很好用,除非我添加 connectFunctionsEmulator(functions, "127.0.0.1", 5001); 到它

catch 块只记录这条无用的消息。

internal functions/internal undefined

我还收到有关 Timer 的警告。

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See https://github.com/facebook/react-native/issues/12981 for more info. (Saw setTimeout with duration 70000ms)

就是这样。很奇怪,不是吗:/?

-- 云函数

exports.helloWorld = functions.https.onRequest(async (req, res) => {
  res.json({ result: `Check` });
});

我在这里添加这个是因为有人可能对此感到好奇。但是,正如我之前提到的,功能在部署后效果很好。 我几乎可以肯定这是客户端问题。

无论提供什么 hostport 我都会收到此错误。即使 Emulatoroff.

也会抛出错误

好的,所以在与这个狗屎战斗了将近一周之后!

当你像我一样使用 Expo Go 时。您应该复制您在其上模拟您的应用程序的主机地址,并使用您模拟您的功能(或其他工具)的相同地址。

app.json

{
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "emulators": {
    "functions": {
      "host": "192.168.0.104",
      "port": 5001
    }
  }
}

requestApi函数的最终代码

const requestApi = async () => {
    const functions = getFunctions(app);

    connectFunctionsEmulator(functions, "192.168.0.104", 5001);   <--- ADDRESS!!!

    const helloWorld = httpsCallable(functions, "helloWorld");
    helloWorld()
      .then((result) => {
        console.log(result);
      })
      .catch((error) => {
        console.log(error.message, error.code, error.details);
      });
  };