Catch all unhandled javascript promise rejections

后端 未结 4 651
青春惊慌失措
青春惊慌失措 2020-11-27 05:01

I would like to catch all unhandled exceptions/rejections that take place within a javascript Promise. Is there a good method for catching them without adding a .catch

相关标签:
4条回答
  • 2020-11-27 05:39

    Some libraries have their own APIs for doing this. Some browsers will report unhandled rejections (sooner or later).

    Actually, done probably does not do what you want. This is why it is not part of the spec. In any case, you still have to remember to call it.

    There is no reliable, cross-platform, cross-library way to do this.

    0 讨论(0)
  • 2020-11-27 05:39

    uncaught library can help you to catch unhandled promise rejections.

    And it handles uncaught errors as well.

    EDIT

    <script type="text/javascript" src=".../uncaught/lib/index.js"></script>
    
    <script type="text/javascript">
        uncaught.start();
        uncaught.addListener(function (error) {
            console.log('Uncaught error or rejection: ', error.message);
        });
    </script>
    

    Benefit of this approach is the only one interface, which allows you to handle both uncaught errors and unhandled promise rejections.

    0 讨论(0)
  • 2020-11-27 05:52

    The whole world is waiting for the unhandledrejection and rejectionhandled events. As of March 2016, Chrome is now the first to support it.

    Example:

    window.addEventListener('unhandledrejection', function(event) {
        console.error('Unhandled rejection (promise: ', event.promise, ', reason: ', event.reason, ').');
    });
    

    Specification: HTML Living Standard

    Mozilla Developer: onrejectionhandled, onunhandledrejection

    Chromium Issues: 495801, 393913

    0 讨论(0)
  • 2020-11-27 05:55

    Note that in Node the event is called unhandledRejection:

    process.on('unhandledRejection', function(err, promise) {
        console.error('Unhandled rejection (promise: ', promise, ', reason: ', err, ').');
    });
    

    On version 12+, node will terminate on these rejections.

    0 讨论(0)
提交回复
热议问题