【问题标题】:Firebreath promise reject slicing exceptionFirebreath 承诺拒绝切片异常
【发布时间】:2015-11-11 09:49:04
【问题描述】:

有没有办法将任何有意义的消息,而不是“std::exception”传递给 Promise 的失败回调?在源代码中,我发现了以下“void FB::variantDeferred::reject(std::exception e) const”规范。似乎当使用从 std::exception 派生的任何异常调用拒绝时,会发生切片并且正确的异常消息会丢失。除了通过成功回调传递错误之外,还有其他解决方法吗?

【问题讨论】:

    标签: firebreath


    【解决方案1】:

    std::exception 只是一个用于在 C++ 中创建异常的基类。您可以使用多种不同的方法将特定的字符串传回;例如,您可以抛出一个std::runtime_error,它接受一条消息。

    您还可以继承 std::exception 并提供 std::exception::what 的实现,它返回您想要的有用字符串表示。

    FireBreath 2.0 在创建 Error 对象时将使用来自 e.what() 的错误消息。如果您对它的工作原理感到好奇,您可以在代码中找到它:

    【讨论】:

    • 感谢您的回答。我知道 FireBreath 2.0 使用来自 std::exception::what 的错误消息。但我的意思是 FB::variantDeferred::reject(std::exception e) 按值获取异常,并调用 std::exception 的复制构造函数。在复制 e.what() 的实际值时会丢失并且对于 e.what() 使用 std::exception::what 的默认实现,它返回标准消息“std::Exception”。我尝试使用 std::runtime_error,但我传递给它的消息也丢失了。我再次在 JavaScript 中得到“std::Exception”。
    • 啊;我明白你的意思。听起来像一个错误;我欢迎一个拉取请求来处理这个问题。我可能最终会修复它,但我不知道我多久能修复它
    • 好的。我会尝试修复它并提出拉取请求。
    猜你喜欢
    • 2011-11-20
    • 2019-11-25
    • 2017-09-04
    • 2013-09-16
    • 2019-04-09
    • 2017-03-12
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多