async/await 服务响应回调有问题

Problem with async/await service response with callback

我正在使用 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" 将所有查询集中到数据库。

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”库和 returns 回调。

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);
        });
    });
});