错误:在 Firebase 可调用函数中,多次提取和 Promise.all() 超出了重定向计数

Error: redirect count exceeded with many fetch and Promise.all() in a Firebase callable function

提问人:albertoivo 提问时间:11/14/2023 最后编辑:albertoivo 更新时间:11/17/2023 访问量:39

问:

当我在firebase可调用函数中执行此操作时:

    for (const origin of originList) {
      for (const destiny of destinyList) {
        // mount the url

        const respPromise = fetch(url)
        .then((resp) => resp.json())
        .then((data) => {
          // manipulate a big JSON (2000 lines or more each one)
        })

        fetchPromises.push(respPromise)
      }
    }

    await Promise.all(fetchPromises)

两个列表都可以有 10 个以上的寄存器,因此提取将运行数百次。 它非常不稳定,有时我会得到正确的结果,但大多数时候我得到:

Unhandled error TypeError: fetch failed
...
cause: Error: redirect count exceeded
      at makeNetworkError (node:internal/deps/undici/undici:4801:35)
      at httpRedirectFetch (node:internal/deps/undici/undici:9659:16)
      at httpFetch (node:internal/deps/undici/undici:9632:28)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async schemeFetch (node:internal/deps/undici/undici:9535:18)
      at async node:internal/deps/undici/undici:9409:20
      at async mainFetch (node:internal/deps/undici/undici:9399:20)
      at async httpFetch (node:internal/deps/undici/undici:9632:22)
      at async schemeFetch (node:internal/deps/undici/undici:9535:18)
      at async node:internal/deps/undici/undici:9409:20

我不知道它是否是纯 javascript 代码,我可以,但重构代码或 firebase 无法在可调用函数中调用这么多 fetch。

有什么建议吗?

JavaScript Node.js Firebase 承诺

评论

0赞 Doug Stevenson 11/14/2023
这看起来像是您的 URL 有问题,而不是您的代码有问题。有关 URL 的某些内容重定向到另一个 URL 的次数过多。
0赞 albertoivo 11/15/2023
@DougStevenson我不这么认为。同一 URL 在其他环境中经过高度测试。我从来没有遇到过邮递员或cURL的错误。或者当这个获取直接在我的 React 代码上时。只有当我将代码从 ReactJS 传输到这个 firebase Callable 函数时,才会发生此错误。
1赞 Doug Stevenson 11/15/2023
如果没有完整的详细信息,我们将无法确定任何人都可以用来完全重现您所看到的问题。错误堆栈跟踪中的所有内容都指向在 nodejs 运行时中观察到的问题,而不是在代码中观察到的问题,因此可以想象问题出在您提供给 node 的 fetch 实现(URL)上。

答:

0赞 albertoivo 11/17/2023 #1

问题是我调用Firebase函数的编码。

我在前端的函数中实例化了Firebase可调用函数。handleSubmit()

当我将其传输到外部时,错误已经弯曲:

  import { getFunctions, httpsCallable } from 'firebase/functions'

  const functions = getFunctions()
  const callableReturnMessage = httpsCallable(functions, 'myFunction')