如果 firebase 文档不存在则抛出错误

Posted

技术标签:

【中文标题】如果 firebase 文档不存在则抛出错误【英文标题】:Throw error if firebase document doesn't exist 【发布时间】:2021-12-02 10:34:52 【问题描述】:

有人可以帮我弄清楚我做错了什么吗?我想在继续我的函数之前先检查一个文档是否存在,如果它不存在,我会抛出一个错误。但是这个错误永远不会被抓住?这是我要抛出错误的函数:

class StoreGateway 
  async addCustomerToStore(
    customerId: string
  ) 
    const customer = await fb.customersCollection.doc(customerId).get();
    if (customer.exists) 
      //do other stuff
     else 
      console.log("customer didn't exist")
      return new Error("customer didn't exist");
    
  

以及我如何调用函数:

StoreGateway.addCustomerToStore(
  req.params.customerId
)
  .then(() => 
    res
      .status(200)
      .json("Success");
  )
  .catch((err) => 
    res.status(500).json(err);
  );

现在如果文档不存在,控制台会打印“客户不存在”,但我从未得到状态 500。

【问题讨论】:

【参考方案1】:

问题是你只是返回一个错误而不是拒绝承诺。你可以按照以下两种方法来拒绝一个 Promise。

1。抛出新的错误
if (customer.exists) 
    //do other stuff
 else 
    console.log("customer didn't exist")
    throw new Error("customer didn't exist");

2。返回一个被拒绝的承诺

if (customer.exists) 
    //do other stuff
 else 
    console.log("customer didn't exist")
    return Promise.reject(new Error("customer didn't exist"));

【讨论】:

谢谢!我因为没有看到错误消息而被甩了,但我必须这样做res.status(500).json(err.message);

以上是关于如果 firebase 文档不存在则抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

仅当 Mono 为空时如何执行操作,如果不为空则抛出错误

如果不存在文件,则处理 gsutil ls 和 rm 命令错误

python读写csv时中文乱码问题解决办法

如果 ETag 不匹配,如何使用 ETag 在插入时抛出异常(除非它是 *)

如果文件不存在,fs.statSync 会抛出错误

赛普拉斯:检查元素是不是存在无异常