我正在使用node-firebird JavaScript模块来查询Firebird数据库。
模块用回调响应,我不能让async/await为我工作,等待该模块的响应。
"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');
}
"padron.service"呼叫"firebird.service";它将所有的查询集中到DB。
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"使用"节点"标准库and and返回一个回调。
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
wait不等待DB的回调
我不知道该怎么修理它。
包装您在padron中提到的代码。服务与承诺如下。现在,从数据库返回的值通过在resolve callback中传递来返回,如果有错误,则在reject callback中传递。
请注意,在错误的情况下,将它传递给异步任务中的拒绝回调,因为与抛出错误
相比,它不会给出意外的输出。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);
});
});
});