为啥这个 Firebase Function Promise 没有返回正确的错误?

Posted

技术标签:

【中文标题】为啥这个 Firebase Function Promise 没有返回正确的错误?【英文标题】:Why is this Firebase Function Promise not returning the correct Error?为什么这个 Firebase Function Promise 没有返回正确的错误? 【发布时间】:2020-03-13 18:52:28 【问题描述】:

这是我正在编写的测试 Firebase 函数: 我已经知道 ref.child(uuid) 在我的实时数据库中不存在。

ref.child(uuid).once('value')
    .then((user) => 
        if (!user.exists()) 
            console.log("Throwing, User not found")
            throw new Error("Error: No record with this UUID in Database");
        

        //Get the node for the given provider (twitter, google or facebook)
        if (user.child(provider).exists())
            return (user.child(provider).val().status)
        else
            throw new Error("Error: Login node does not exist for this provider");
    )
    .then((result) => res.status(200).json(status: result))
    .catch((error) => res.status(400).json(error_msg: error));

输出

Throwing, User not found

400, "error_msg": 

所以throw new Error() 行运行了,但是catch 不知何故没有从'error' 参数中获取错误消息。

这怎么可能?

【问题讨论】:

【参考方案1】:

Error 构造函数包含两个属性messagename,因此更改:

error_msg: error

进入这个:

error_msg: error.message

参考如下:

https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/Error

【讨论】:

值得注意的是,这是因为 Error 对象的各种属性不可枚举,因此被 JSON.stringify(someErrorObject) 忽略。如果您想了解更多信息,this question 会就该主题以及如何绕过它进行一些有趣的讨论。

以上是关于为啥这个 Firebase Function Promise 没有返回正确的错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Firebase 会在 once() 函数之外丢失引用?

为啥这个 Firebase“.indexOn”不起作用?

为啥这个 NSString 在 FireBase 查询块中为空?

为啥我在连接 Firebase 时会在 Arduino 中遇到这个问题?

为啥在 Typescript(Firebase 函数)中双重导入 NPM 包

为啥 Firebase 数据库(Firestore)不添加文档