#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
единицами.