Firebird 데이터베이스를 쿼리하기 위해 node-firebird JavaScript 모듈을 사용하고 있습니다.
모듈이 콜백으로 응답하고 해당 모듈의 응답을 기다리기 위해 비동기 / 대기 작업을 수행 할 수 없습니다.
"padron.controller"컨트롤러는 "padron.service"서비스를 호출하여 쿼리를 작성합니다.
try {
let res = await this.padronService.getFamilia(body);
console.log('padron.controller - Response from padron.service', res);
return res;
} catch {
throw new Error('Erro na DB');
}
모든 쿼리를 DB에 중앙 집중화하는 "firebird.service"에 대한 "padron.service"호출.
try {
let res = await this.firebirdService.getQuery(query, params);
console.log('padron.service - Response from FirebirdService ================', res);
return res;
} catch {
throw new Error('Erro na DB');
}
"firebird.service"는 "node-firebird"라이브러리를 사용하며 콜백과 함께 반환됩니다.
fb.attach(this.options, (err, db) => {
if (err) throw new Error('Erro na conexión á DB');
db.query(query, params, (err, res) => {
if (err) throw new Error('Erro na consulta ó Padrón');;
console.log('firebird.service - Response DB ================', res);
db.detach();
return res
});
});
내 문제는 대답의 순서
padron.service - Response desde FirebirdService ================ undefined
padron.controller - Response desde padron.service undefined
firebird.service - Response DB ================ {
USU_USUARIO: 'SUPER',
USU_CLAVES: '',
USU_CARGO: 'ADMINISTRADOR',
USU_TER: null,
주문해야 할 때
firebird.service - Respuesta DB ================ {
USU_USUARIO: 'SUPER',
USU_CLAVES: '',
padron.service - Respuesta desde FirebirdService ================ undefined
padron.controller - Respuesta desde padron.service undefined
await는 DB의 콜백을 기다리지 않습니다.
그리고 나는 그것을 고치는 방법을 모릅니다.
padron.service에서 언급 한 코드를 아래와 같은 약속으로 감싸십시오. 이제 db에서 반환 된 값은 resolve 콜백에 전달하여 반환되며, 오류가 있으면 reject 콜백에 전달합니다.
오류가 발생한 경우 비동기 작업에서 콜백을 거부하도록 전달하면 오류 발생과 비교하여 예상치 못한 출력이 제공되지 않습니다.
return new Promise((resolve, reject) => {
fb.attach(this.options, (err, db) => {
if (err) {
// throw new Error('Erro na conexión á DB');
reject('Erro na consulta ó Padrón');
}
db.query(query, params, (err, res) => {
if (err) {
// throw new Error('Erro na consulta ó Padrón');
reject('Erro na consulta ó Padrón');
}
console.log('firebird.service - Response DB ================', res);
db.detach();
// return res
resolve(res);
});
});
});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다