약속에 대한 나의 이해가 완벽하지 않습니다.
그래서 어떤 코드가 오류 및 예외 상황을 처리하는 올바른 방법인지 잘 모르겠습니다.try-catch 또는 promise.catch로 promise.reject 처리
코드를 올바르게 작성하는 데 도움이됩니다.
첫 번째. 시도 - 시도 - 캐치 sequelizer의 promise.catch를 잡을 수 있다면 캐치를 sequelizer의 promise.reject이 들어
async function doGetAdminList(adminName) {
let adminList;
try {
adminList = await sequelize.query(
sqls.GET_ADMIN_LIST,
{ replacements: { adminName: adminName }, type: sequelize.QueryTypes.SELECT }
);
} catch (e) {
return Promise.reject({status:500, message: "SQL Error" });
}
if (!adminList || !Object.keys(adminList).length) {
log.info('\nadminList not found :\n');
return Promise.reject({status:400, message: 'adminList not found.' })
}
return adminList;
}
에 대해 궁금().
2nd. sequelizer의 promise.reject이 들어
async function doGetAdminList(adminName) {
let adminList;
adminList = await sequelize.query(
sqls.GET_ADMIN_LIST,
{ replacements: { adminName: adminName }, type: sequelize.QueryTypes.SELECT }
);
if (!adminList || !Object.keys(adminList).length) {
log.info('\nadminList not found :\n');
return Promise.reject({status:400, message: 'adminList not found.' })
}
return adminList;
}
을 처리하지 않는, 나는 sequelizer의 promise.reject()가 호출 기능을 전달() promise.catch에 발신자의 사로 잡았 할 수 있는지 궁금합니다.
위의 sequelize-using 함수는 express 함수 아래에서 사용됩니다.
const jwtAuth = require('../common/jwtAuth.js');
exports.getAdminList = function (req, res) {
res.setHeader("Content-Type", "application/json; charset=utf-8");
if (!req.body.adminName) {
return res.status(400).json({ message: 'adminName is empty.' });
}
jwtAuth(req.headers.accesstoken)
.then((decoded) => {
worker = decoded.loginName;
return doGetAdminList(adminName);
})
.then((adminList) => {
log.info("getAdminList() finish");
res.status(200).json(adminList);
})
.catch(e => {
log.error(e);
return res.status(e.status).json(e);
});
};
jwtAuth.js
adminController.js
기능을 약속이기도합니다.
const jwt = require('jsonwebtoken');
module.exports = async function verifyJwt(token) {
return await new Promise((resolve, reject) => {
if (!token) {
reject({status:401, message:'Empty token'});
return;
}
jwt.verify(token,"dipa",function(err, decoded){
if(err) {
reject({status:401, message:'TokenExpiredError'});
} else {
resolve(decoded);
}
});
});
}
내부와
getAdminList
을 할 경우 'async function'을 사용한다면'return Promise '대신'throw'를 사용하십시오.거부 ' – Bergi당신의 질문은 "* 나는 오류를 잡아서는 안되나, 잡아서 다른 오류를 다시 범하는 것이 좋을 것"이라고 생각한다. 'sequelize.query'가'status'를 가진 객체를 거부하지 않으면, sql 에러를 포착하지 않는 버전은 작동하지 않습니다. – Bergi
@Bergi 네, 네 말이 맞아. 나는 거부에 대한 catch 예외를 완전히 오해 할 수도있다. – sungyong