как обрабатывать UnhandledPromiseRejection при вызове функции в NodeJS - PullRequest
0 голосов
/ 31 августа 2018

У меня есть следующая функция, которая читает массив и передает его на мой сервер

let storedProcedure = async (params, storedProcedureName) => {
const pool = await getOrCreatePool()
let request = await pool.request()
params.forEach((parameter) => {
    parameterDirection = parameter.isOutput ? 'output' : 'input';
    request = request[parameterDirection](parameter.name, parameter.type, parameter.value)
});
try {
    return await request.execute(storedProcedureName)
} catch(err) {
    console.error('StoredProcedure error', err);
    return null;
}
}

и я так называю

apiRoutes.put('/update/:leadid', function(req, res) {

var param = validateUpdateLead(req.body, req.params.leadid)   
var promise = sqlUtil.storedProcedure(param,'sp_Leads_UPD')


       promise.then((result) => 
        {
            console.log('LeadID:' + req.params.leadid + ' Updated - ' + result.rowsAffected[0] + ' Rows Effected')
            res.json({ success: true, RowsAffected : result.rowsAffected[0], UpdatedLeadID :req.params.leadid }).status(200)  
        })
        .catch(err)

        {
        res.send('error':err )
        }
 })

когда я делаю это, мой системный узелJs жалуется, что "ReferenceError: err не определен", поэтому возникает вопрос, как я могу передать ошибку из моей функции в вызов и перехватить ее? Когда у меня есть звонки, которые терпят неудачу из-за одного или или или по причине, которую я получаю (узел: 1512) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'leadid' из неопределенного по обещанию. at process._tickCallback (internal / process / next_tick.js: 68: 7) (узел: 1512) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (код отклонения: 1) Поэтому я надеюсь, что это просто исправить

1 Ответ

0 голосов
/ 15 декабря 2018

(узел: 1512) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'leadid' из неопределенного значения в обещании. /process/next_tick.js:68:7) (узел: 1512)

Итак, это происходит потому, что вы возвращаете значение NULL при наличии ошибки в хранимой процедуре. Для правильного поведения вы должны выбросить ошибку из хранимой процедуры, например

console.error('StoredProcedure error', err);
throw new Error(err);

или просто вы можете просто удалить try catch из хранимой процедуры и позволить функции route обработать ошибку, такую ​​как

let storedProcedure = async (params, storedProcedureName) => {
   const pool = await getOrCreatePool()
   let request = await pool.request()
   params.forEach((parameter) => {
      parameterDirection = parameter.isOutput ? 'output' : 'input';
      request = request[parameterDirection(parameter.name, parameter.type, parameter.value)
   });

  return await request.execute(storedProcedureName)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...