2017-02-02 2 views
3

Недавно я оказался в ситуации, которую очень сложно отлаживать. Представьте себе следующую очень простую ситуацию:NodeJS: Ошибки автолопа в Promise и отклонение вызова

function somePromise() { 
    return new Promise((resolve, reject) => { 
     SomeModule.someMethod(); 
     AnotherModule.somePromise().then(resolve).catch(reject); 
    }); 
} 

Resolve никогда не называли, но я не получаю сообщение об ошибке в консоли - это было трудно для отладки!
Оказывается, я забыл потребовать SomeModule. После этого код работал должным образом.

Есть ли способ автоматически попробовать/поймать каждое обещание в моем коде с помощью обработчика ошибок? Я не хочу окружать тело своих обещаний блоком try/catch, чтобы легче находить такие ошибки в будущем.

Заранее благодарим за мнения!

ответ

3

Есть ли способ автоматически попробовать/поймать каждое обещание в моем коде с помощью обработчика ошибок?

Это неявно сделано конструктором Promise. Если обратный вызов синхронно генерирует исключение, обещание отклонится.

Однако вы действительно должны избегать Promise constructor antipattern! Использовать

function somePromise() { 
    SomeModule.someMethod(); 
    return AnotherModule.somePromise(); 
} 
+0

Это было просто для упрощения, я делаю некоторую дополнительную обработку с результатами обещания, которое оправдывает «антипаттерн». – CrushedPixel

+0

Нет, нет оправдания для антипаттера. Просто выполните '.then (processing)', где 'processing' - это функция, которая берет результаты обещания и вычисляет новое возвращаемое значение. Очень вероятно, что ошибки в обработке были фактической причиной, по которой вы не получили сообщений об ошибках. – Bergi

+0

Они не были, проблема была в методе catch метода, использующего мой собственный метод обещания. Но спасибо за ваше мнение. – CrushedPixel

Смежные вопросы