【问题标题】:Firebase functions issue when using res使用 res 时的 Firebase 函数问题
【发布时间】:2021-09-20 16:42:45
【问题描述】:

我在代码的async (req, res) => { 部分收到一个奇怪的错误。错误信息是

“类型参数'(req: Request, res: Response) => Promise' 不能分配给类型为 '(req: 请求,响应:响应)=> void |承诺'。类型 'Promise' 不可分配给类型 'void | 承诺'。类型 'Promise' 不可分配给 输入“承诺”。类型“响应”不可分配给类型 '无效'.ts(2345)"

我注意到,当我将res 与点运算符一起使用时,就会出现这个问题。我曾经将这样的代码部署到 Firebase Functions 没有问题。我从头开始设置开发环境并使用 eslint 而不是 tslint。打字稿或任何禁止编译和部署代码的 lint 是否有变化?也许是我的 eslint 中的一个设置?

我唯一怀疑的是我需要定义函数的返回类型。但无论如何都找不到定义返回类型。

exports.fetchQuestionSet2 = functions.https.onRequest(async (req, res) => {
  const a = 0;
  console.log(a);
  const test = req;
  console.log(test);
  console.log(res);
  if (req.method === "PUT") {
    return res.status(403).send();
  } else {
    return res.send({});
  }
});

【问题讨论】:

    标签: node.js typescript firebase google-cloud-functions


    【解决方案1】:

    问题是在我使用res 之前,我一直在使用return 语句。通过删除 return 关键字,问题现在消失了。

    exports.fetchQuestionSet2 = functions.https.onRequest(async (req, res) => {
      const a = 0;
      console.log(a);
      const test = req;
      console.log(test);
      console.log(res);
      if (req.method === "PUT") {
        res.status(403).send();
      } else {
        res.send({});
      }
    });
    

    【讨论】:

    • 虽然在这种情况下删除 return 有效,但将 return 放在自己的行上以便它不返回值会达到相同的结果。
    • @samthecodingman 不确定是否理解您的评论。你的意思是res.send({}); return;?你能详细说明一下吗?
    • @RenaudTarnec 将 if (req.method === "PUT") { return res.status(403).send(); } 重写为 if (req.method === "PUT") { res.status(403).send(); return; }。在这个特定的用例中,添加return; 是没有意义的,但是对于任何有此问题的未来读者来说,它可能会导致代码在不应该执行的地方继续执行。
    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2019-03-01
    • 2019-10-26
    • 2021-06-21
    • 1970-01-01
    • 2019-03-13
    • 2020-05-03
    • 2022-01-20
    相关资源
    最近更新 更多