В контексте обещания вы должны на самом деле выдать ошибку:
throw new Error('wrongggwcode');
Если это выполняется в обратном вызове конструктора обещания или then
обратном вызове, его можно перехватить с помощью метода catch
(или второй аргумент then
) и аргумент обратного вызова, который вы передаете ему, будет ошибкой (объект).
Вызов reject
изнутри обратного вызова then
, очевидно, не будет работать, так как вытам нет доступа к reject
, но он будет работать в режиме обратного вызова конструктора обещаний.
Простой пример:
new Promise((resolve, reject) => {
setTimeout( () => reject(new Error('this is an error')) );
}).then( (value) => console.log('resolved with ' + value) )
.catch( (error) => console.log('error message: ', error.message) );
Вложенность
Если у вас есть вложенные обещания в обратных вызовах then
, убедитесь, что вы всегда возвращаете значение, возвращаемое внутренним обещанием, как возвращаемое значениевнешний then
обратный вызов.
Так что в вашем случае сделайте следующее:
return creditMemo.findById( ....
//^^^^
По той же причине вам нужно сделать:
return ubiqInvoice.findById( ....
//^^^^
Это приведетдалеко за этот вопрос / ответ, но лучше избегать вложенных обещаний then
звонки все вместе.Вместо вызова then
для вложенного обещания просто верните обещание без вызова then
и примените этот then
вызов на один уровень выше, чтобы у вас была «плоская» цепочка вызовов then
.Это просто вопрос передового опыта, хотя он также должен работать так, как вы это делали, при условии, что вы всегда возвращаете внутренние обещания.
Положение обработчика ошибок
Обработчик ошибок размещается внеправильная позиция;на самом деле вы используете оператор запятой.Короче говоря, у вас есть это в вашем коде:
new Promise(function (resolve, reject) {
// ... //
}), function (error) {
console.log("error: " + error);
}
Функция после запятой никогда не выполняется, так как она не является аргументом для вызова метода.Он просто стоит за запятой.
Вам нужен вызов метода catch
для нового обещания и каскадная ошибка там, чтобы Promise.all
также получал отклонение:
return new Promise(function (resolve, reject) {
// ... //
}).catch(function (error) {
console.log("error: " + error);
throw error; // cascade it
});