chrome 53 не улавливает необработанные отклоненные обещания

#javascript #google-chrome #promise #bluebird #superagent

#javascript #google-chrome #обещание #bluebird #суперагент

Вопрос:

Я использую chrome 53 при разработке, и определенный вызов API возвращает отклоненное bluebird обещание. Хотя в моем коде есть обработчики ошибок, отклоненное обещание не улавливается, а просто утешается.

вызов API:

 function call() {
    return new Promise((resolve, reject) => {
        superagent
            .get('some url')
            .end((err, res) => {
                if(err) {
                    return reject(err);
                }
                resolve(res);
            });
    });
}
  

и обработчики ошибок:

 window.onerror = ((message, filename, lineno, colno, error) => {
    const {unhandledErrors} = this.state;

    if(!error) {
        return;
    }

    error.timestamp = moment().format('YYYY-MM-DD HH:mm:ss');

    //handling error in React
    this.setState({
        unhandledErrors: updateUnhandledErrors(unhandledErrors, error)
    });

    console.error(error);
});

window.onunhandledrejection = (({reason}) => {
    const {unhandledErrors} = this.state;
    const error = reason;
    error.timestamp = moment().format('YYYY-MM-DD HH:mm:ss');

    //handling error in React
    this.setState({
        unhandledErrors: updateUnhandledErrors(unhandledErrors, error)
    });

    console.error(error);
});

// bluebird handler
window.addEventListener('unhandledrejection', e => {
    e.preventDefault();
    const {unhandledErrors} = this.state;

    const error = e.detail.reason;
    error.timestamp = moment().format('YYYY-MM-DD HH:mm:ss');

    //handling error in React
    this.setState({
        unhandledErrors: updateUnhandledErrors(unhandledErrors, error)
    });

    console.error(error);
});
  

Работает на Firefox 31 и Chromium 35

Комментарии:

1. какой обработчик запускается в firefox? и вы уверены, что это обещание Bluebird?

2. @JaromandaX, вы полностью правы! Я забыл переопределить собственные обещания с помощью bluebird . Спасибо!

3. меня насторожил тот факт, что вы сказали, что это работает в firefox: p

Ответ №1:

Благодаря комментарию @JaromandaX я понял, что забыл заменить собственные обещания bluebird единицами.